ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法
程序员文章站
2024-03-03 21:57:34
今天发现在ie10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,ie10送出的http头,和.auth cookie都没问题,但使用表单...
今天发现在ie10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,ie10送出的http头,和.auth cookie都没问题,但使用表单验证机制(formsauthentication)却无法判断该用户已登入,保存的session总会丢失.
后查实这是asp.net 2.0,3.5和4.0的bugs,因这些版本无法识别ie10的user-agent标头字符串,所以无法识别用户浏览器的版本,从而导至了asp.net的特定功能失效,认为游览器不支持cookies功能,不处理与cookie相关的程式码等,从而在浏览器中不保存服务器返回的session标识,造成丢失等.
这个问题早经微软官方确认,是ie10的一个bug,也发布了两个hotfix专门用来修复这个问题,各位如遇到同样的问题,可参考以下说明:
kb2600088: hotfix 适用在 microsoft.net framework 4.0 中的 asp.net []
kb2608565: hotfix 适用在 .net framework 3.5.1 中的 asp.net []
kb2600100: hotfix 适用在 .net framework 3.5 sp1 与 .net framework 2.0 sp2 中的 asp.net []
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file)
步骤如下:
1.添加一个"app_browsers"文件夹
2.添加一个"*.browser"后缀的文件,如ie10.browser.
3.添加文件内容如下:
<browsers>
<browser refid="default">
<capabilities><!-- to avoid wrong detections of e.g. ie10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>
设定完成,问题即可解决
后查实这是asp.net 2.0,3.5和4.0的bugs,因这些版本无法识别ie10的user-agent标头字符串,所以无法识别用户浏览器的版本,从而导至了asp.net的特定功能失效,认为游览器不支持cookies功能,不处理与cookie相关的程式码等,从而在浏览器中不保存服务器返回的session标识,造成丢失等.
这个问题早经微软官方确认,是ie10的一个bug,也发布了两个hotfix专门用来修复这个问题,各位如遇到同样的问题,可参考以下说明:
kb2600088: hotfix 适用在 microsoft.net framework 4.0 中的 asp.net []
kb2608565: hotfix 适用在 .net framework 3.5.1 中的 asp.net []
kb2600100: hotfix 适用在 .net framework 3.5 sp1 与 .net framework 2.0 sp2 中的 asp.net []
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file)
步骤如下:
1.添加一个"app_browsers"文件夹
2.添加一个"*.browser"后缀的文件,如ie10.browser.
3.添加文件内容如下:
复制代码 代码如下:
<browsers>
<browser refid="default">
<capabilities><!-- to avoid wrong detections of e.g. ie10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>
设定完成,问题即可解决