为什么IE保持会话活着?

时间:2014-09-15 20:50:34

标签: c# asp.net-mvc asp.net-mvc-4 internet-explorer session

Hy all!

我正在使用C#开发一个MVC 4.0 Web应用程序,并出现以下错误。 在主流浏览器(Chrome,Mozilla Safari等)中,当我在我的Web应用程序中单击注销时,它会正确执行,注销当前用户。 当我在IE上执行相同的操作时,不能正常工作,我使用新用户登录,IE保留最后一个用户,直到按ctrl + F5。 我用于身份验证的唯一事情就是Sessions,仅此而已。

有人问过acrros这个问题吗?我已经尝试过清除缓存,与abadon清除会话,清除,删除,当我在IE上时似乎没有任何工作。

如果你们需要更多信息来帮助我,我会尽快回答!!

2 个答案:

答案 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的一个不重要的部分,你可以绕过它。这种方法的一个优点是,您实际上希望浏览器缓存某些页面,而不是其他页面,这是一种更客户端的方式,用于确定您是否需要从服务器获取新副本。