【问题标题】:Why does ASP.NET start a new session in the middle of a session when using Internet Explorer?为什么 ASP.NET 在使用 Internet Explorer 时会在会话中间启动一个新会话?
【发布时间】:2014-12-15 18:16:00
【问题描述】:

我有一个 ASP.NET 应用程序,它似乎在另一个会话中间开始一个新会话。

  • 使用表单身份验证。

  • 身份验证超时 = 120。sessionState 超时 = 130。

  • sessionState 模式 = InProc.

  • cookieless = false(应与 UseCookies 相同)。

  • 仅在访问十几个其他页面后访问特定页面时才会发生。但是,如果我在访问否则失败的页面之前访问其他页面,则不会发生错误。

  • 不是因为应用程序池回收。我连续几个小时运行相同的 w3wp 进程。运行状况监控日志没有显示任何内容。

  • 在 F12 开发人员工具中使用网络功能时,所有 cookie 值在从一个会话到下一个会话的转换中仍然存在,但在失败点,cookie 视图显示“已接收:ASP.NET_SessionId”,而所有其他值在同一请求中显示为“已发送”。

  • 一切都发生在同一个域中(在本例中为 localhost)。

  • 对象在用户登录后几乎立即存储在 Session 对象中,因此这不是由于未使用的 Session 对象而导致每个请求的 ASP.NET_SessionId 更改的情况之一。

  • Windows 7 x64 开发系统上的 IIS 7.5。与所有 Windows 更新完全同步。

  • 我已将调试语句添加到 Global.asax 中的所有全局事件中,并且没有迹象表明我的任何代码会导致会话 ID 在请求过程中丢失。我只是在调用特定函数时得到一个新的 Session_Start 事件,尽管到目前为止已经成功处理了几十个请求。

示例用户代理字符串 (Chrome):“Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36”

示例用户代理字符串 (Internet Explorer):“Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko”

使用 Internet Explorer 9、10 和 11 可以始终如一地重现该问题。我没有尝试过旧版本的 Internet Explorer。

问题无法使用最新版本的 Firefox 或 Chrome 重现。

是否有我可以检查的内容列表,以便找出为什么 ASP.NET 认为它需要在运行 Internet Explorer 但没有其他浏览器类型时启动一个新会话并分配一个新的 ASP.NET_SessionId 值?

恐怕我不能比这更具体,但我希望以上信息至少能消除谈话中的一些常见嫌疑人。

【问题讨论】:

  • 您使用网络农场吗?还是负载均衡器?
  • @WiktorZychla:不,我认为 User-Agent 字符串与此无关。正如我所写,该问题影响到 IE9、IE10 和 IE11——而不仅仅是 IE11。不过谢谢你的建议。
  • @Rex:不。没有网络花园/农场和负载平衡器。这是一个带有 IIS 7.5 的本地 Win7 x64 开发系统。对于正在使用的应用程序池,Maximum Worker Processes 设置为 1。这是一个特定于应用程序的应用程序池 - 不是 DefaultAppPool 或与其他应用程序共享的应用程序池。
  • @JoergenBech 尝试将会话存储在 sql server 或检查此链接:stackoverflow.com/questions/454616/…

标签: c# asp.net cookies session-timeout asp.net-session


【解决方案1】:

问题出在 Internet Explorer 中 50 个 cookie 的限制。

这在Number and size limits of a cookie in Internet Explorer中有描述

Internet Explorer increases the per-domain cookie limit from 20 to 50

过度使用 cookie 导致每次访问 new 函数时都会添加多个 cookie,这就是为什么它需要进行大量测试才能到达会话 id 被推出的点通过 cookie 集合中新键的到来。

Chrome 有 180 个 cookie 的限制,而 Firefox 有 150 个 cookie 的限制,这解释了为什么该应用程序的运行时间比 Internet Explorer 的情况要长得多。

可以使用Browser Cookie Limits 页面测试给定浏览器的限制。

我在What are the current cookie limits in modern browsers?的接受答案中找到了该链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2011-06-11
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多