2013-06-22 37 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方法上使用过滤器。它会做与上述相同的事情。

相关问题