引用:http://www.cnblogs.com/fanvy/archive/2013/02/07/2908769.html
今天發現在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中控制項事件回傳操作無效問題。