我有一个 ASP.NET 应用程序,它似乎在另一个会话中间开始一个新会话。
使用表单身份验证。
身份验证超时 = 120。会话状态超时 = 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 值?
恐怕我不能比这更具体,但我希望以上信息至少可以消除谈话中的一些常见嫌疑人。