Hy all!
我正在使用C#开发一个MVC 4.0 Web应用程序,并出现以下错误。 在主流浏览器(Chrome,Mozilla Safari等)中,当我在我的Web应用程序中单击注销时,它会正确执行,注销当前用户。 当我在IE上执行相同的操作时,不能正常工作,我使用新用户登录,IE保留最后一个用户,直到按ctrl + F5。 我用于身份验证的唯一事情就是Sessions,仅此而已。
有人问过acrros这个问题吗?我已经尝试过清除缓存,与abadon清除会话,清除,删除,当我在IE上时似乎没有任何工作。
如果你们需要更多信息来帮助我,我会尽快回答!!
答案 0 :(得分:0)
我发现了以下作品:
Session.Clear()
Session.Abandon()
Session.RemoveAll()
If Request.Cookies("ASP.NET_SessionId") IsNot Nothing Then
Response.Cookies("ASP.NET_SessionId").Value = ""
Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddMonths(-20)
End If
答案 1 :(得分:0)
通常,浏览器会实现它,以便ctrl + f5表示“为当前网址发出http请求,而不使用浏览器缓存”。所以,无论你在服务器中执行了什么操作 - 代码,因为IE默认情况下从当地内存重新加载当前页面而不打你的服务器,你不会出现退出。然后,当它最终返回到你的服务器时,它仍然发送相同的cookie,因为将您退出的页面实际上从未被击中。
测试是否发生这种情况的一种方法是在注销代码中设置断点。刷新页面而不在IE中保持ctrl
,并查看断点是否被击中。如果不是,那么你知道客户端缓存是原因。
解决方法:
服务器上的此代码将发送包含元数据的页面,指示在任何情况下都不允许浏览器缓存页面:
response.Cache.SetAllowResponseInBrowserHistory(false);
response.Cache.SetCacheability(HttpCacheability.NoCache);
response.Cache.SetNoStore();
response.Cache.SetExpires(DateTime.Now);
response.Cache.SetValidUntilExpires(true);
- 或 -
当您使用以下链接转到退出页面时:/logout
或/home?logout=1
添加一个额外的参数:/logout?cacheBust=123yt74y5t
,使最后一部分随机。这是有效的,因为大多数浏览器缓存都会基于url进行缓存,所以如果你随机搞乱了url的一个不重要的部分,你可以绕过它。这种方法的一个优点是,您实际上希望浏览器缓存某些页面,而不是其他页面,这是一种更客户端的方式,用于确定您是否需要从服务器获取新副本。