2010-07-19 57 views
0

當我想將用戶重定向到登錄牆後​​的特定頁面並且他們尚未登錄時,他們會被重定向到可登錄的主頁。當他們登錄時,他們被重定向到默認地址。登錄時記住目的地

我該如何着手記住用戶原來的目的地在重定向到登錄頁面之前的位置?

用解決EDITED

感謝您的答覆。我所做的是在檢測到用戶未登錄時設置GET請求,使用URL:domain.com/?url=$_SERVER["REQUEST_URI「]

因此,當用戶被重定向到登錄頁面,用戶嘗試訪問的地址在GET值中設置。當用戶登錄並進行身份驗證時,我會測試以查看是否有GET值(如果有),然後將其附加到URL地址欄的末尾。

編輯完

回答

1

最簡單的方法是將當前頁面的網址添加到登錄頁面作爲參數:

... not logged in .... 
header("Location: loginpage.php?url=". 
     urlencode($_SERVER["REQUEST_URI"])); 

(注意,爲此,這兩個腳本必須如果他們在不同的域名,你需要使用類似"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]

和登錄後,重定向到該頁面:

header("Location: ".$_GET["url"]); 
+0

而* HTTP \ _HOST *實際上只是主機。 – Gumbo 2010-07-19 12:14:01

+0

@Gumbo arrgh! :) 該吃午飯了。乾杯。我現在把它切成絕對路徑。 – 2010-07-19 12:17:10

+0

不要忘記理智檢查。 ;) – Gumbo 2010-07-19 12:21:54

0

您可以使用$_SERVER['PHP_SELF']返回當前頁面的相對路徑,並將其作爲查詢字符串參數傳遞給登錄頁面。

例如,你的代碼來檢查,如果一個用戶登錄可以坐在一個包含文件,看起來像以下:

if(!isset($_SESSION["some variable"])) 
{ 
    $login = sprintf("%s?dest=%s", LOGIN_URL, $_SERVER['PHP_SELF']); 
    header("location: " . $login); 
} 

您的登錄頁面上,一旦用戶已經登錄,您可以重定向他們到原始的URL,這是使用$ _GET [「dest」]訪問。

代碼是從內存中鍵入的,我無法測試,直到後來 - 它應該可以工作!

1

添加包含到頁面的用戶路徑的變量開始記錄看一看它是如何在這麼做了:當您選擇登錄您重定向到一個頁面,有一個returnurl參數,如:

returnurl=%2fquestions%2f3280860%2fremembering-destination-when-logging-in 

成功登錄後,您可以將用戶返回到該頁面。