会话在Asp.Net MVC 2中过期

时间:2014-05-08 11:34:45

标签: asp.net-mvc session cookies

有些用户关闭了所有浏览器并再次打开IE8,他们在登录页面中收到“Session Expired”消息,这很奇怪,有时只会发生。

显示该消息的条件是:

var sessionTimedOut = Session.IsNewSession && Request.Headers["Cookie"] != null && Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE);

通常,当浏览器关闭时,所有cookie都会消失,因为这是这些cookie的范围。

那么是什么导致这种情况成真呢?

1 个答案:

答案 0 :(得分:1)

您是否将值ASPNET_SESSION_COOKIE自己保存到会话中?...或者仅仅依赖于ASP.net内置的会话处理程序?如果您不是自己保存,则以下情况可能导致问题。

我认为您的情况未正确配置以检查过期的会话。原因是 -

  1. 默认情况下,ASP.Net会在Sessions中保存Cookie,因此,无论何时创建新会话,Cookie都会如此。

  2. 让我们考虑一下,会话已经过期,然后是请求的时间 (这是登录页面的GET)ASP.net正在检查CookieSession,并发现它需要创建一个新会话。因此,它会创建一个Session并保存Cookie。

  3. 再次,让我们考虑一下,这是第一次有人看到页面,同样的事情会发生在2.条件总是如此。

  4. 您需要在Cookie /会话中保存一些自定义Cookie/Session值,以便您可以再次检查它。

  5. 我非常怀疑,条件 -

    Session.IsNewSession && Request.Headers["Cookie"] != null && Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE); 
    

    永远不会错误,除非您在ASP.Net处理或检查会话之前使用或检查此