用户代理在请求中间切换?

mar*_*c_s 9 asp.net user-agent webforms

我有一个非常奇怪的问题 - IIS 6上的ASP.NET 3.5 Webforms应用程序.

结果是用户连接到我们的站点,并获得一个ASP.NET会话,输入一些数据,突然,他输入的所有数据(并存储在会话中)都消失了.

错误日志告诉我们,由于一些奇怪的原因,他只是在我们的应用程序中工作的新会话.

从IIS日志中,我们看到一个ASP.NET请求中,用户代理从用户的浏览器开关报道-从MSIE+7.0MSIE+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 ....)
Run Code Online (Sandbox Code Playgroud)

似乎对.aspx页面的两个请求是在MSIE+7.0模式下完成的,而对CSS和JS文件以及GIF和JPG图形的任何后续请求都会报告MSIE+8.0...... WTF?!?!?

不确定这是否真的是突然失去ASP.NET会话的根本原因 - 但用户代理切换本身让我们摸不着头脑......任何想法?

如果这种行为不是那些"失去的会议"的根本原因 - 任何想法/引导可能是什么原因?到目前为止,Bing,谷歌或任何其他来源我都无法挖掘出过于有用的东西......

更新:我读的这个论坛主题的事实,用户代理是第一之间的不同GET(其在获取.aspx页)和后续GET的请求.css,.js可能会导致丢失的会话(这是一个PHP的环境,虽然).任何人都可以确认这是否也适用于ASP.NET?(或表明此陈述不属实)

如果确实如此 - 有没有办法告诉ASP.NET 不要因为用户代理字符串与之前的请求不匹配而启动新的sesssion?

Spu*_*ley 1

你在这里所描述的确实听起来很奇怪。

如果没有看到它的实际情况,很难确定发生了什么,但是(不包括 UA 欺骗)我能想到的只有一件事可以在这里起作用:兼容性模式。

我不知道 IE 为不同的请求类型提供不同的 UA 字符串,即使在兼容模式下也是如此,但我想这是可能的。

但无论如何,我的建议是通过X-UA-Compatible向页面添加元标头来阻止 IE 使用兼容模式。像这样的事情应该这样做:

<meta http-equiv="x-ua-compatible" content="IE=edge">
Run Code Online (Sandbox Code Playgroud)

<head>将其添加到HTML 代码部分的顶部附近。

这将强制 IE 使用其最好的页面呈现引擎。不再有兼容模式。因此,如果这是您神秘地更改 UA 字符串的原因,它应该可以解决该问题。


(当然,如果用户有一个可以欺骗 UA 字符串的浏览器,那么所有的赌注都会被取消。但即便如此,他们想要在会话中间这样做似乎很奇怪)