2014-10-08 55 views
0

我在我的網站上有一個登錄頁面,每頁都有一個PHP代碼,它將檢查cookie,如果用戶具有特定的cookie,它將停留在該頁面上如果它不會重定向到目標網頁。 在登陸頁面上,我確實有一個按鈕,當用戶點擊它時,cookie會被創建。如何從前一頁獲取請求的URl

當用戶點擊按鈕時,頁面應該返回到之前的頁面。 我的代碼是

if(isset($_COOKIE['username'])){ 
    $_COOKIE['username']; 
    header('location: http://example.com/main'); 
} 
else{ 
// 
} 

反正有沒有找到以前的網頁鏈接或原請求的URL?

+0

http://stackoverflow.com/q/24253653/ – 2014-10-08 18:45:41

回答

1

是的,你可以使用在$_SERVER superglobal發現HTTP_REFERER值:

if(isset($_COOKIE['username'])) { 
    $_COOKIE['username']; // <-- what is this for? What are you doing with it? 
    header('location: http://example.com/main'); 
    die(); 
} 
else{ 
    header(
     'Location: ' . 
     !empty($_SERVER['HTTP_REFERER']) ? 
      $_SERVER['HTTP_REFERER'] : 
      'http://example.com/access_denied' // In case HTTP_REFERER is blank, fallback to this 
    ); 
    die(); 
} 

注意,你不應該依賴於嚴格的安全考慮這個值,但作爲一個「超生用戶到前一頁「功能,這應該足夠了!在發送重定向頭文件之後,不要忘記使用exitdie語句,否則腳本的其餘部分仍然會執行!從約HTTP_REFERER的文檔

注:

的頁面(如果有的話),其被稱爲用戶代理到當前頁面的地址。這由用戶代理設置。並非所有的用戶代理都會設置它,有些提供了將HTTP_REFERER修改爲功能的功能。總之,它不能真正被信任。

+0

額外的一個小瑕疵將是傾銷''history.go(-1)'一些JavaScript。並不總是有效,但也不依賴於已經收到有效引用者的服務器。 – 2014-10-08 18:42:18

+0

[** HTTP_REFERER **的可靠程度如何](http://stackoverflow.com/a/6023980/) – 2014-10-08 18:42:21

+0

謝謝@ Fred-ii-,這就是爲什麼我說不應該存在依賴性,但是如果客戶端發送了在這種情況下被操縱的'HTTP_REFERER',他們只會被彈回到被操縱的路徑... – sjagr 2014-10-08 18:47:42