2011-03-09 231 views
0

在我的網站上,表單通過AJAX引入並對照sessionid進行檢查。我知道這不是最佳的,但它對我們有用。如果引薦者沒有會話ID,他們將被重定向回「anotherpage」。我需要允許一些外部URL直接訪問表單。 我們使用指向表單的鏈接在頁面上設置了sessionid。PHP幫助if/else語句

這裏是我們現在有窗體頁上:

<?php 
$code = $_GET['sessionid']; 
if(strcmp($code , 'XXXXX' ) != 0) { 
    header("Location: http://www.domain.com/anotherpage.php"); 
} 
?> 

我需要讓一些外域到表單頁面直接訪問以及與此是有問題: (我把它上面表單頁面上的頭標記)

<?php 
    $code = $_GET['sessionid']; 
    $referrer = $_SERVER['HTTP_REFERER']; 

    if(strcmp($code , 'XXXXX') !=0) { 
     header("Location: http://www.domain.com/anotherpage.php"); 
    } else { 
     if (preg_match("/site1.com/",$referrer)) { 
      header('Location: http://www.domain.com/desiredpage.php'); 
     } 
    } 
?> 

這還是我彈回「anotherpage.php」任何想法?

** * ** * **編輯* ** * ** * THX的幫助,它的工作原理廣告我請求。現在我看到我問的不完全正確。這會追加= = sessionid?= XXXXX的URL。這不是我的網站上的問題,因爲我使用.jquery .load加載內容,因此URL不會更改。我不想讓sessionid可見,現在是。我可以a)以某種方式「修剪」網址或b)分開這兩個功能,使它們獨佔?

+1

沒有了'否則'保證另一個條件?在'禁止重定向'之前不應該評估_that_條件,還是應該將'else'的內部條件與重定向一起嵌入到第一條中? – 2011-03-09 18:32:17

回答

3
if(strcmp($code , 'XXXXX') !=0) { 
    if (preg_match("/site1.com/",$referrer)) { 
     header('Location: http://www.domain.com/desiredpage.php'); 
    } else { 
     header("Location: http://www.domain.com/anotherpage.php"); 
    } 
} 
+0

@amosrivera - 有沒有辦法做到這一點沒有顯示附加網址「domain.com/desiredpage.php?sesionid=XXXXX」在瀏覽器地址欄?在我的網站這一切都通過jQuery做阿賈克斯> .load特定的div所以隱藏網址 – 2011-03-09 18:35:56

+0

你可以有一個第三頁,是以重定向的照顧,有你就必須if語句domain.com/redirect.php?sessionid = XXXX,那是什麼意思? – amosrivera 2011-03-09 18:38:22

+0

@amosrivera - 是的,我認爲是這樣,一個單獨的第三頁,我告訴外部網站使用作爲和該頁面只有引用檢查? – 2011-03-09 18:42:43

1

您的第一個if正在檢查他們是否沒有$code並將其重定向。情況總是如此。您應該首先檢查$referrer,然後執行$code檢查。

0

如果我沒有誤解這個問題,那麼問題就出在你檢查事物的順序上。

如果你想允許一些引薦訪問該網站即使他們沒有會話ID,你必須檢查爲以前檢查會話ID。否則,他們最終會像其他人一樣被對待。

您可以切換條件順序(首先檢查引用鏈接,然後檢查會話標識),或檢查分支中您已知道會話標識無效的引用鏈接。

1

嘗試反向如果與其他

<?php 
    $code = $_GET['sessionid']; 
    $referrer = $_SERVER['HTTP_REFERER']; 
    if (preg_match("/site1.com/", $referrer)) { 
     header('Location: http://www.domain.com/desiredpage.php'); 
    } else if (strcmp($code , 'XXXXX') != 0) { 
     header("Location: http://www.domain.com/anotherpage.php"); 
    } 
?> 
+0

@jcubic - 上述相同的答案,並工作。 PHP可以「修剪」一個網址嗎?有沒有辦法做到這一點沒有顯示附加網址「domain.com/desiredpage.php?sesionid=XXXXX」在瀏覽器地址欄?在我的網站這一切都通過jQuery做阿賈克斯> .load特定的div所以隱藏網址 – 2011-03-09 18:38:47

+0

嘗試'頭:;'你也可以使用(「位置http://www.domain.com/desiredpage.php?」)如果您使用apache,則使用.htaccess文件中的mod_rewrite。 – jcubic 2011-03-09 18:45:42

+0

使用標題('Location ..... php?')不起作用。我將如何在.htaccess中使用它?一個301重定向到帶有附加url的頁面?不會顯示網址? – 2011-03-09 18:50:12

0

的問題可能是在您的正則表達式,它應該是:()

if (preg_match("/site1\.com/",$referrer)) 

通知逃脫點