2011-08-10 143 views
2

一直在閱讀有點找到答案,沒有太多的運氣。重定向到頁面用戶正在嘗試登錄後登錄

我有一個網站,成員可以匿名瀏覽網站,但有些網頁是受限制的。一旦他們點擊需要他們登錄查看的鏈接,我會將這些成員重定向到登錄頁面。

我現在面臨的問題是我不知道如何給成員,他們試圖去登錄後的頁面重定向。

他們試圖去/profile.phtml,它將它們發送到/login.phtml,現在他們登錄時,我希望它們被髮送到/profile.phtml,因爲這是他們點擊去的地方。如果他們點擊/album.phtml,我希望他們在登錄後被髮送到/album.phtml。

任何人都可以幫忙嗎?我是否以某種方式將URL存儲在會話中?

非常感謝。

+0

將URL存儲在查詢字符串中。我不使用PHP,所以我不能給你的代碼,但這是ASP.Net如何做到這一點。您將返回到登錄頁面,並顯示如下URL:login.aspx?returnurl = orginalpage.aspx。然後當他們登錄閱讀查詢字符串參數並重定向到頁面 –

回答

5

就在撥打header("Location:")呼叫前重定向,將他們當前所在的頁面存儲在$_SESSION['redirect_to']。成功登錄後,再撥打header()來重定向回原始頁面並取消設置會話變量,以免在任何地方意外重複使用。

$_SESSION['redirect_to'] = $_SERVER['REQUEST_URI']; 
header("Location: http://example.com/login.php"); 
exit(); 

// On successful login 
$redirect = $_SESSION['redirect_to']; 
// unset the session var 
unset($_SESSION['redirect_to']); 
header("Location: http://example.com/$redirect"); 
exit(); 
+0

我認爲這是瀏覽器本身支持的東西的一個不必要的工作量和會話存儲量。 – vicTROLLA

+0

工作就像一個魅力,美麗!謝謝。如果我能想到這個......這樣一個簡單的概念。再次感謝你! – Darius

0

你可以很好地使用會議變量,像其他人所建議的。但是,我寧願依靠HTTP_REFFERER。這裏的缺點不是每個瀏覽器都會發送一個引用,但大多數主流瀏覽器都這麼做。這是HTTP標準的一部分,我認爲它足夠好。堅持這在您的登錄腳本。

if(!empty($_SERVER['HTTP_REFERER'])) { header('Location: '.$_SERVER['HTTP_REFERER']); } 
+0

正如您所說,HTTP_REFERRER通常是空的,特別是在使用HTTPS時。很多瀏覽器都不會通過https發送推薦人。 –

+0

@Michael只有當引用者和新位置不安全時纔會發生。如果該會話是全局HTTPS,則會看到填充引用者。 – vicTROLLA

相關問題