【发布时间】:2013-03-12 05:49:59
【问题描述】:
我有一个非常奇怪的问题 - IIS 6 上的 ASP.NET 3.5 Webforms 应用程序。
效果是用户连接到我们的站点,并获得一个 ASP.NET 会话,输入一些数据,突然间,他输入的所有数据(并存储在会话中)都消失了。
错误日志显示,出于某种奇怪的原因,他在我们的应用程序中工作的过程中刚刚获得了一个新会话。
从 IIS 日志中,我们看到 在单个 ASP.NET 请求中,用户浏览器报告的用户代理从 MSIE+7.0 切换到 MSIE+8.0....那是?
日志摘录:
07:06:38 GET /SomePage.aspx 80 - x.x.x.139 Mozilla/4.0+ (compatible;+MSIE+7.0;+Windows+NT+5.1) 401
07:06:38 GET /SomePage.aspx 80 DOMAIN\USERNAME x.x.x.139 Mozilla/4.0+ (compatible;+MSIE+7.0;+Windows+NT+5.1) 200
07:06:39 GET /javascript/somefile.js 80 DOMAIN\USERNAME x.x.x.139 Mozilla/4.0+ (compatible;+MSIE+8.0;+Windows+NT+5.1) 200
(lots more requests for .css, .js, .gif, .jpg - all with MSIE+8.0 ....)
似乎对.aspx页面的两个请求是在MSIE+7.0模式下完成的,而任何后续对CSS和JS文件以及GIF和JPG图形的请求都会返回MSIE+8.0...... WTF ?!?!?
不确定这是否真的是 ASP.NET 会话突然丢失的根本原因 - 但用户代理本身的切换让我们摸不着头脑......有什么想法吗?
如果这种行为不是那些“丢失会话”的根本原因 - 任何想法/线索可能是什么原因?到目前为止,我无法从这里、Bing、Google 或任何其他来源挖掘任何过于有用的东西......
更新:我读到in this forum thread,用户代理在第一个GET(获取.aspx 页面)和随后的GET 请求之间是不同的@ 987654332@、.js 可能会导致会话丢失(尽管这是 PHP 环境)。谁能确认这是否也适用于 ASP.NET? (或证明此说法不正确)
如果确实如此 - 是否有任何方法告诉 ASP.NET不要仅仅因为用户代理字符串与之前的请求不匹配而开始新的会话?
【问题讨论】:
-
进程内或进程外会话?如果您的 AppPool 被回收,就会发生这种情况。
-
如果用户在兼容模式下运行 IE8,它会在请求页面时将用户代理作为 IE7 发送。 IEBlog
-
@nunespascal:它在进程内 - 是的,应用程序池回收会导致这种情况 - 但在一两秒钟内?对于成熟的应用程序池回收来说似乎有点太快了......
-
@nunespascal:是的,同意 - 但我不会在 ALL
GET请求所有资源时看到MSIE+7.0吗?为什么MSIE+7.0用于.aspx页面,然后MSIE+8.0用于其他所有内容?? -
虽然我没有您的问题的答案,但值得尝试将会话保持在进程之外。将消除有关 AppPool 回收或 IIS 重置的任何疑问。
标签: asp.net webforms user-agent