Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么IE让会话保持活跃?_C#_Asp.net Mvc_Asp.net Mvc 4_Internet Explorer_Session - Fatal编程技术网

C# 为什么IE让会话保持活跃?

C# 为什么IE让会话保持活跃?,c#,asp.net-mvc,asp.net-mvc-4,internet-explorer,session,C#,Asp.net Mvc,Asp.net Mvc 4,Internet Explorer,Session,嗨 我正在用C开发一个MVC4.0Web应用程序,出现以下错误。 在主要浏览器Chrome、Mozilla Safari等中。。。当我在我的web应用程序中单击注销时,它会正确地注销当前用户。 当我在IE上执行相同的操作时,dosen不起作用,我使用新用户登录,IE保留最后一个用户,直到我按ctrl+F5。 我唯一使用的身份验证是会话,仅此而已 有人来问这个问题?我尝试过清除缓存,清除abadon会话,清除,removeall,当我在IE上时,似乎什么都不起作用 如果你们需要更多的信息来帮助我,

我正在用C开发一个MVC4.0Web应用程序,出现以下错误。 在主要浏览器Chrome、Mozilla Safari等中。。。当我在我的web应用程序中单击注销时,它会正确地注销当前用户。 当我在IE上执行相同的操作时,dosen不起作用,我使用新用户登录,IE保留最后一个用户,直到我按ctrl+F5。 我唯一使用的身份验证是会话,仅此而已

有人来问这个问题?我尝试过清除缓存,清除abadon会话,清除,removeall,当我在IE上时,似乎什么都不起作用


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

我发现了以下工作:

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                                                  

通常,浏览器实现它时,ctrl+f5表示对当前url发出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中不重要的部分,你可以绕过它。此方法的一个优点是,您实际上希望浏览器缓存某些页面,而不是其他页面,这是一种更为客户端的方法,用于确定您是否希望从服务器获得新副本。

此行为是在您的IIS应用程序服务器环境中发生的还是仅在本地发生的?