解決 IE10 浏览器无法使用 ASP.NET 表单验证登录的问题

IE10中Session丢失问题引起众多业内人士的关注,今天发现在IE10中登录网站时,使用表单验证机制(FormsAuthentication)却无法判断该用户已登入,保存的Session总会丢失,本文将介绍解决方法,感兴趣的朋友可以参考下,或许对你有所帮助

今天发现在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> 

设定完成,问题即可解决

时间: 2024-10-26 20:11:30

解決 IE10 浏览器无法使用 ASP.NET 表单验证登录的问题的相关文章

ASP.NET表单验证方法详解第1/2页_实用技巧

1.使用验证控件 这属于客户端验证,微软开发人员将最常用的验证功能进行了封装,使得我们开发效率明显提高,而且特别是自定义验证控件,非常灵活,我们可以自行设计验证逻辑.但是验证控件收到了浏览器的限制,记得在一次开发过程中,使用FireFox浏览器进行浏览,发现所有的验证控件失灵,这个并非是ASP.NET设计的漏洞,只能说浏览器标准的不唯一造成的. ASP.NET公有六种验证控件,分别如下: RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 CompareValid

asp.net 表单验证新思路_实用技巧

简要说明:随机验证某一项或几项.减少验证工作量. 复制代码 代码如下: public static int IntRound(int Max) { Random r = new Random(); int i = r.Next(0, Max); r = null; return i; } 复制代码 代码如下: int i=IntRound(8); if (Request.Form["txt" + i] != "") { } 也可以这样验证 (不过,要注意其他非正常表

asp form 表单验证函数_应用技巧

'************************************* '检测是否只包含英文和数字 '************************************* Function IsvalidValue(ArrayN, Str) IsvalidValue = False Dim GName For Each GName in ArrayN If Str = GName Then IsvalidValue = True Exit For End If Next End Fu

asp form 表单验证函数

'************************************* '检测是否只包含英文和数字 '************************************* Function IsvalidValue(ArrayN, Str) IsvalidValue = False Dim GName For Each GName in ArrayN If Str = GName Then IsvalidValue = True Exit For End If Next End Fu

详解ASP.NET MVC Form表单验证_实用技巧

一.前言 关于表单验证,已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下.本来想从用户注册开始写起,但发现东西比较多,涉及到界面.前端验证.前端加密.后台解密.用户密码Hash.权限验证等等,文章写起来可能会很长,所以这里主要介绍的是登录验证和权限控制部分,有兴趣的朋友欢迎一起交流. 一般验证方式有Windows验证和表单验证,web项目用得更多的是表单验证.原理很简单,简单地说就是利用浏览器的cookie,将验证令牌存储在客户端浏览器上,co

asp.net 2.0 下的表单验证Cookieless属性

asp.net|cookie|表单验证 刚刚在洗衣服的时候突然想到今天在做WAP程序的表单验证的时候遇到一个问题,在不支持Cookies的移动设备模拟器中无法正常进行表单验证,联想到昨天使用web.config设置cookieless属性时会在访问时会出现"Cannot use a leading .. to exit above the top directory"的异常,自然而然的我就想到了前一段时间困扰我很久的一个站点异常无法使用前导 .. 在顶级目录上退出(Cannot use

asp.net 2.0下的表单验证Cookieless属性

刚刚在洗衣服的时候突然想到今天在做WAP程序的表单验证的时候遇到一个问题,在不支持Cookies的移动设备模拟器中无法正常进行表单验证,联想到昨天使用web.config设置cookieless属性时会在访问时会出现"Cannot use a leading .. to exit above the top directory"的异常,自然而然的我就想到了前一段时间困扰我很久的一个站点异常无法使用前导 .. 在顶级目录上退出(Cannot use a leading .. to exi

用ASP动态生成JavaScript的表单验证代码

javascript|表单验证|动态 表单的验证是开发WEB应用程序中常遇到的一关.有时候我们必须保证表单的某些项必须填写.必须为数字.必须是指定的位数等等,这时候就要用到表单验证了,一般我们常用的表单验证有2种方式: 1.编写JavaScript或VBScript的表单验证函数,在客户端进行验证:2.在表单提交后,使用ASP的方法Request.Form获取表单的输入值进行判断,然后返回结果,这是在服务端进行验证: 这2种方式都有其优缺点,比如第1种方式速度比较快,而且通常使用警告框的方式,用

用ASP动态生成JS的表单验证代码

js|表单验证|动态 表单的验证是开发WEB应用程序中常遇到的一关.有时候我们必须保证表单的某些项必须填写.必须为数字.必须是指定的位数等等,这时候就要用到表单验证了,一般我们常用的表单验证有2种方式: 1.编写JavaScript或VBScript的表单验证函数,在客户端进行验证: 2.在表单提交后,使用ASP的方法Request.Form获取表单的输入值进行判断,然后返回结果,这是在服务端进行验证: 这两种方式都有其优缺点,比如第1种方式速度比较快,而且通常使用警告框的方式,用户能够很快的根