【问题标题】:User Agent switching in the middle of a request?用户代理在请求中间切换?
【发布时间】: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


【解决方案1】:

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

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

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

但无论如何,我的建议是通过将X-UA-Compatible 元标题添加到您的页面来防止 IE 使用兼容模式。应该这样做:

<meta http-equiv="x-ua-compatible" content="IE=edge">

将其添加到 HTML 代码的 &lt;head&gt; 部分顶部附近。

这应该会强制 IE 使用它最好的页面渲染引擎。没有更多的兼容模式。因此,如果这是您神秘地更改 UA 字符串的原因,它应该可以解决这个问题。


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

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多