2009-09-24 64 views
1

我想實現一個功能,能夠給用戶的URL /地址重定向到他試圖在登錄前能夠訪問技術記住網址

例如:

  1. 用戶正嘗試訪問註冊的會員專區。
  2. 他被告知他沒有登錄並重定向到索引頁面。

如何在成功登錄時將用戶重定向到「第1步」網址?

我希望我能夠解釋我正在嘗試做什麼。

感謝(提前)任何幫助和:-)

+0

代表圖表顯示在這個問題上沒有downvote鑄造。你是否想要憐憫upvotes? – random 2009-09-24 12:31:27

+1

我會推薦標題更改爲「技術用於記住用戶通過HTTP請求打算的URL」或者提供一些更詳細的問題。 – 2009-09-24 12:43:32

+0

根本不是e.c.ho先生,但是當我第一次發佈這個問題時,它被直接投票了。我現在刪除了該評論。 – 2009-09-24 12:53:15

回答

6

你可以通過該網址在URL:

if (!$loggedIn) { 
    header('Location: http://example.com/login?return='.urlencode($_SERVER['REQUEST_URI'])); 
    exit; 
} 

併成功登錄後:

if ($loginSucessful) { 
    if (isset($_GET['return']) && substr($_GET['return'], 0, 1) == '/')) { 
     header('Location: http://example.com'.$_GET['return']); 
    } else { 
     header('Location: http://example.com/'); 
    } 
    exit; 
} 
+0

謝謝先生。 :-) – 2009-09-24 12:48:00

+0

請注意,我對「返回」值進行了粗略驗證。 – Gumbo 2009-09-24 13:05:26

+0

我做這樣的事情,除了我將它存儲到會話而不是在URL中 – JasonDavis 2009-09-24 16:00:43

6

存放在隱藏字段請求URL登錄表單並登錄後重定向到URL

+1

您也可以嘗試使用會話變量 – Irfy 2009-09-24 12:29:23

3

儲存於該會議的建議(或者甚至是cookie),然後重定向到登錄頁面

1

您可以使用我真正喜歡的東西:HTTP身份驗證。這樣你就沒有重定向到一個特殊的登錄頁面,深層鏈接就像他們應該那樣工作。 Trac得到這個權利,恕我直言。

另一種選擇是將URL存儲在您可能創建的會話中。如果您沒有在登錄時銷燬會話,那麼您可以使用它在登錄後重定向到深層鏈接。

+0

http auth不是很安全,但是 – warren 2009-10-26 08:59:03

+0

warren:什麼是缺乏?如果你想要安全(即竊聽者的隱私和知道另一方真的是你期望的),那麼你使用SSL。對於通過HTTP拋出的其他任何東西都是一樣的。 – Joey 2009-10-26 10:08:03

2

在會話中存儲要好得多。它允許用戶關注鏈接(例如註冊鏈接),並在登錄後仍然被重定向到原始頁面。

2

我已經看到論壇將其放入網址,如www.myurl.com ?prevUrl = <prevUrl>。當然,存儲的URL必須使用encodeURI進行編碼。

3

在過去,我已經重定向到認證頁面與「最終目的地「頁面有重定向網址:http://example.com/login?redirect=/secured/resource

記住URL編碼參數值。此外,當您處理重定向網址的值時,請確保它是您網站上的網址或相對網址,以避免網絡釣魚攻擊等任何安全攻擊。否則,第三方可以定位您網站的登錄頁面,然後重定向回其網站並可能訪問用戶的安全會話。

我不使用會話來存儲URL的原因是,搜索引擎蜘蛛可能最終創建會話,因爲他們點擊您網站上受保護並需要登錄的鏈接。由於他們必須憑據,會話創建僅在30分鐘後超時。