有些用户关闭了所有浏览器并再次打开IE8,他们在登录页面中收到“Session Expired”消息,这很奇怪,有时只会发生。
显示该消息的条件是:
var sessionTimedOut = Session.IsNewSession && Request.Headers["Cookie"] != null && Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE);
通常,当浏览器关闭时,所有cookie都会消失,因为这是这些cookie的范围。
那么是什么导致这种情况成真呢?
答案 0 :(得分:1)
您是否将值ASPNET_SESSION_COOKIE
自己保存到会话中?...或者仅仅依赖于ASP.net内置的会话处理程序?如果您不是自己保存,则以下情况可能导致问题。
我认为您的情况未正确配置以检查过期的会话。原因是 -
默认情况下,ASP.Net会在Sessions
中保存Cookie
,因此,无论何时创建新会话,Cookie
都会如此。
让我们考虑一下,会话已经过期,然后是请求的时间
(这是登录页面的GET)ASP.net正在检查Cookie
或Session
,并发现它需要创建一个新会话。因此,它会创建一个Session
并保存Cookie。
再次,让我们考虑一下,这是第一次有人看到页面,同样的事情会发生在2.条件总是如此。
您需要在Cookie /会话中保存一些自定义Cookie/Session
值,以便您可以再次检查它。
我非常怀疑,条件 -
Session.IsNewSession && Request.Headers["Cookie"] != null && Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE);
永远不会错误,除非您在ASP.Net处理或检查会话之前使用或检查此。