8

我在这里有一个非常奇怪的问题 - 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 会话突然丢失的根本原因 - 但用户代理本身的切换让我们摸不着头脑......有什么想法吗?

如果这种行为不是那些“丢失会话”的根本原因 - 关于可能是什么原因的任何想法/线索?到目前为止,我无法从这里、必应、谷歌或任何其他来源挖掘任何过于有用的东西......

更新:我在这个论坛帖子中读到,用户代理在第一个GET(获取.aspx页面)和后续GET请求.css之间不同的事实.js可能导致会话丢失(尽管这是一个 PHP 环境)。谁能确认这是否也适用于 ASP.NET?(或表明此陈述不正确)

如果真的是这样 - 有没有办法告诉 ASP.NET不要仅仅因为用户代理字符串与先前的请求不匹配而开始新的会话?

4

1 回答 1

1

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

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

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

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

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

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

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


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

于 2013-03-22T15:19:09.023 回答