2013-06-22 332 views
1

我正在開發一個MVC3應用程序,我有一個登錄頁面。一旦用戶登錄到頁面,當他/她點擊瀏覽器的後退按鈕時,問題就出現了,它會將他們帶回到我不想要的登錄頁面。如何防止登錄用戶訪問登錄頁

簡而言之,我想要一個和facebook,gmail和其他網站一樣的登錄功能。

我想過的一種方式是找到一種方法來在登錄後控制瀏覽器後退按鈕,並相應地如果它被單擊,則將用戶重定向到相同的登錄頁面。 我做了大量的研究,但沒有任何東西似乎適用於我。

任何將不勝感激。提前致謝。

回答

3

你可以把下面的腳本在登錄視圖(包含用戶名和密碼的字段中):

<script type="text/javascript"> 
    window.history.forward(); 
</script> 
+0

這是Google/Facebook如何做的嗎?我喜歡Facebook如何知道我已經登錄並自動顯示我的主頁。 –

+0

這份工作對我來說非常感謝 –

0

如果登錄HTTPGET操作有一個NoCache的動作過濾器,以防止瀏覽器緩存它,那麼如果用戶通過後退按鈕返回,瀏覽器將請求一個新的登錄頁面,控制器操作代碼可以檢測到用戶已經通過身份驗證並將其重定向到其他頁面。

4

雖然Darin提供的解決方案將工作。但如果你問我,Facebook尚未實施該解決方案。 我相信一個合適的解決方案不應該很難實現。 我們需要做兩件事。

確保登錄頁面無法被認證用戶訪問。

您可以按如下

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     //Important 
     if (Request.IsAuthenticated) 
     { 
      return RedirectToAction("Action", "Controller"); // ur action and controller 
     } 

     if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      return RedirectToLocal(returnUrl); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 

確保登錄頁面不被緩存

把這個代碼在上面的方法,以確保邏輯頁是從不修改登錄get方法從緩存返回

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

或者您可以使用NoCache Ac在Login方法上使用過濾器。它會做與上述相同的事情。

相關問題