4

我正在开发一个 MVC3 应用程序,但遇到了登录安全问题。场景是当用户使用他/她的用户名和密码登录时,如果正确,他/她将被重定向到他们的主页。

但是如果他们点击浏览器的后退按钮,他们会回到登录页面,在我的情况下,我不想要。就像 facebook、gmail 等一样,一旦用户使用他/她的凭据登录,他们就无法通过单击浏览器的后退按钮返回登录页面。

4

2 回答 2

6

您可以使用 javascript 检查您在成功登录后提供的 cookie。如果 cookie 存在,js 将检查它的页面加载并重定向到非登录页面。还有其他方法可以做到这一点,如下所述: here

于 2013-07-28T07:01:54.713 回答
1

您需要使缓存和标头过期,这是我使用的:

  <% HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
   HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
   HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
   HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
   HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
   HttpContext.Current.Response.Cache.SetNoStore();
   Response.Cache.SetExpires(DateTime.Now);
   System.Web.HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
   Response.Cache.SetValidUntilExpires(true);
   Response.Buffer = true;
   Response.ExpiresAbsolute = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));
   Response.Expires = 0;
   Response.CacheControl = "no-cache";
   Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-4)); 
   Response.ExpiresAbsolute = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));
   Response.AppendHeader("Pragma", "no-cache");
   Response.Cache.AppendCacheExtension("must-revalidate, proxy-revalidate, post-check=0, pre-check=0");
%>  
<script language="javascript" type="text/javascript">
    window.onbeforeunload = function () {
        // This function does nothing.  It won't spawn a confirmation dialog   
        // But it will ensure that the page is not cached by the browser.
    }  
</script>

将此添加到页面标题中,下次用户尝试返回时,它将请求新页面加载。

于 2013-07-28T07:28:26.403 回答