【问题标题】:Session Expired in Asp.Net MVC 2Asp.Net MVC 2 中的会话已过期
【发布时间】:2014-06-25 18:39:04
【问题描述】:

有些用户关闭所有浏览器,再次打开IE8,登录页面提示“Session Expired”,很奇怪,只是偶尔出现。

显示该消息的条件是:

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

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

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

【问题讨论】:

  • 编辑:我可以通过等待会话过期,然后在任务管理器上终止浏览器,然后打开浏览器并明确转到登录页面 (myserver.com/Web/Authentication/Login) 来复制问题,但我没有'不要相信我的用户正在杀死浏览器 - 我相信他们甚至不知道如何做到这一点......
  • 它可能与特定的IE8行为stackoverflow.com/questions/1324181/…有关。你能问问你的用户他们到底在做什么吗?
  • 只是猜测,如果您使用表单身份验证,请将 cookie 设置为持久化。
  • 什么是 ASPNET_SESSION_COOKIE?
  • 如果你能够重现它,那么也许可以使用像 Fiddler 这样的工具来检查 HTTP 请求并查看会话 id 是如何传递回服务器的(即 cookie、url、http 标头)。看看ASP.NET State Management 寻找一些东西。

标签: asp.net-mvc session cookies


【解决方案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 值,以便您可以再次检查它。

我非常怀疑,条件 -

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

绝不是假的,除非您正在使用或检查它,在 ASP.Net 处理或检查会话之前。

【讨论】:

  • 让我解释一下:这是我的 LoginController 的 Login GET 操作。
  • 当所有其他浏览器都关闭时启动新的 IE8 时 Session.IsNewSession 为 true 并且 Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE) 为 false,所以我只是将登录表单呈现给用户。
  • 如果我启动 IE8,登录,等待会话和身份验证/表单到期,在登录操作上打开一个新的 IE8,则:Session.IsNewSession 为 true 并且 Request.Headers["Cookie"] .Contains(ASPNET_SESSION_COOKIE) 是真的,所以我错误地在那个新窗口上显示会话已过期
  • 现在与您的理论相矛盾的是:如果我启动 IE8,登录,等待会话和身份验证/表单到期,关闭所有浏览器,在登录操作上打开一个新的 IE8,然后:Session.IsNewSession 是true 并且 Request.Headers["Cookie"].Contains(ASPNET_SESSION_COOKIE) 为 false,所以我没有在登录视图上显示任何超时消息。
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2010-12-02
  • 2012-04-24
相关资源
最近更新 更多