.Net MVC 在IE10中cookieless表单认证的问题
在調試佳佳原創網站時,發現在360瀏覽器,火狐和Apple Safari等瀏覽器,瀏覽和發布修改信息都沒有問題 ,但是在IE10中,登錄后,瀏覽器的輸入框中會出現一長串字符,之后,提交信息時,系統又會跳轉到登錄頁面,信息無法提交。如圖1所示:
圖1 IE10中登錄認證后瀏覽框中顯示
在.Net MVC中,關于用戶登錄的認證方式有使用Windows認證和使用表單認證。在Window認證中,又分匿名認證(Anonymous Authentication),基本認證(Basic Authentication),摘要認證(Digest Authentication)和Windows認證(Windows Authentication)。大多數Internet程序中,大多使用表單認證,它比Windows認證要多花費一些努力,但一切準備就緒后,它便更加靈活。表單認證的安全性依賴于一個名為“.ASPXAUTH”的瀏覽器加密cookie。關于表單認證的配置,在項目根目錄的web.config中,配置內容如下:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
配置好之后,在360瀏覽中,火狐瀏覽器中和Apple Safari中登錄,認證、提交內容均沒有問題 。但是在IE10中,就是出現上圖1中的情況,導致提交信息失敗。研究后發現,在登錄時,IE10使用了cookieless表單認證。Cookieless表單認證模式中,認證票據是通過隱藏到URL而不是cookie中進行保護的。數據仍然被簽名和加密,但它是作為URL的一部分被發送至服務器的。因此,就出現了上圖1中的情況。為了使瀏覽器明確選擇使用哪種認證方式,我們需要在配置文件中明確,配置如下所示:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" cookieless="UseCookies"/>
</authentication>
告訴瀏覽器,我們要使用cookie認證,而不要使用URL認證。
這樣,在IE10再次登錄時,URL就沒有之前的一長串字符串了,提交信息也正常。問題解決,非常方便。如圖2所示。
圖2 修改配置后,瀏覽器認證后URL的顯示