[转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題
今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會不會又是罄竹難書的 IE10 搞的鬼。後來用 Fiddler 工具檢查後發現 IE10 送出的 HTTP 標頭完全沒問題,該有的 .AUTH Cookie 都有送出,但使用表單驗證機制 (FormsAuthentication) 就是無法判斷該使用者已經登入,還真的再次鬼打牆,最後還是研究出解決方法。
簡單來說,這算是個 ASP.NET 2.0、3.5 與 4.0 的 Bugs,因為這兩個版本無法識別 IE10 的 User-Agent 標頭字串,所以無法正確識別用戶端的 IE10 瀏覽器版本,因而導致 ASP.NET 特定功能失效,在這個例子中,出問題的地方在於 ASP.NET 以為瀏覽器不支援 Cookies 功能,所以 ASP.NET 將不處裡任何與 Cookies 相關的程式碼!
以下是 IE10 的 User-Agent 標頭字串:
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
這個問題早在 2011/4/16 就有人到 Microsoft Connect 網站回報過,而且經微軟官方確認這是個 Bug,爾後還發布了兩個 Hotfix 專門用來解決這個問題,各位如果遇到一樣的問題可以參考以下兩篇 KB 說明:
- 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 瀏覽器定義檔 [英文]
在這問題發現之後的 ASP.NET 版本已經修復了這個問題,所以我們在 Windows 8 上開發網站並不會有這個錯誤出現,所以上到客戶的正式機才出問題。
在此分享一個更簡易的解決方法,只要在網站目錄新增一個 瀏覽器定義檔 (browser definition file) 即可解決此問題,步驟如下:
1. 先在專案目錄或正式機網站跟目錄下新增一個 App_Browsers 資料夾
2. 新增一個副檔名為 *.browser 的檔案,例如:IE10Fix.browser,檔案內容如下:
- <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>
<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>
設定完成後,問題自然解決!
[转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題的更多相关文章
- 何解決 LinqToExcel 發生「無法載入檔案或組件」問題何解決 LinqToExcel 發生「無法載入檔案或組件」問題
在自己的主機上透過 Visual Studio 2013 與 IISExpress 開發與測試都還正常,但只要部署到測試機或正式機,就是沒辦法順利執行,卡關許久之後找我協助.我發現錯誤訊息確實很「一般 ...
- [CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!
每次調CSS最令人頭痛的就是瀏覽器校正問題,因為每個瀏覽器對CSS的解釋都不太一樣,Firefox本身算是比較照規矩來,處理上比較簡單,但是遇到微軟的IE系列頭就大了,雖然都是IE,但是IE6.IE7 ...
- [Xamarin] 透過 intent-filter 來接管 http ,製作偽瀏覽器 (转帖)
使用Android 的朋友一定對這畫面不陌生在開啟網址的時候,或是Youtube連結的時候,因為Android 發現,你手機安裝的App有哪些可以支援這些東西的瀏覽 所以,就可以使用甚麼東西來進行開啟 ...
- 一個小技巧讓ipad或iphone的瀏覽器也能開啟firebug
首先複製這一段代碼 javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']& ...
- javascript: iframe switchSysBar 左欄打開關閉,兼容各瀏覽器操作
<html> <head> <meta content="text/html; charset=utf-8" http-equiv="Con ...
- 解決 IE10 浏览器无法使用 ASP.NET From 验证登录的问题
最近应项目用到ASP.Net表单验证机制(FormsAuthentication),来判断用户是否已经登录,一切测试顺利,最后发布到IIS中后在IE10测试是发现始终判断用户没登录(其他浏览器一切正常 ...
- http請求瀏覽器的緩存機制
轉載自:http://kb.cnblogs.com/page/73901/ 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /a.html HTTP/1.1 H ...
- css瀏覽器私有前綴名
-webkit-:chrome,safari -o-:opera -moz-:firefox -ms-:ie
- chrome瀏覽器去掉緩存的方法
方法一: 1.開發說打開開發者工具 勾選這個訪問可以 方法二: command+shift+R
随机推荐
- Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)
http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...
- Java基础(三)选择和循环结构
一.选择结构,条件判断 1.if 语句 一个 if 语句包含一个布尔表达式和一条或多条语句.如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码. impor ...
- nexus3安装
windows环境 1.下载nexus3 2.以管理员的方式打开命令行,建议打开服务管理界面,将这个服务设置为手动,步骤是:右键我的电脑-->服务-->nexus,然后点击设置手动启动 3 ...
- so模块加载后数据问题
lualib-src里面都没有存数据的地方 那么bjm里面的这块数据防全局,再多个虚拟机里require后数据会全局共享吗
- select下拉框选择字体大小
效果: 结合Bootstrap.jQuery和ES6字符串模板与箭头函数使用JavaScript DOM操作动态添加option,随着option:selected选中的字号而改变相应的字体大小 代码 ...
- lib 和 dll
dll 和 lib只有在windows平台才会出现,老是忘记他们的区别和联系,记录一下,以备不时之需,也加深一下印象. 在弄懂两者的区别之前,需要知道两个概念: static library 和 d ...
- linux sheel script demo
demo1 (输入/输出) 1.1. target : 输入姓.名, 输出姓名 1.2. create directory mkdir ~/bin 1.3. create & edit she ...
- 用css3+js写了一个钟表
有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧! 先给个成品图,最终结果是个样子的(动态的). 首先,思考了一下页面的布局,大致需要4层div,最底层 ...
- Linux符设备驱动编程
加入内核源码树外 ① 建立两个文件scull.c,scull.h,以及Makefile文件 Makefile文件 ② 用make进行编译,生成scull.ko驱动程序模块 ③ 把scull.ko模块加 ...
- 《Visual C++ 2010入门教程》系列一:关于Visual Studio、VC和C++的那些事
原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115606.html 作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我 ...