標籤:style c class blog code java
公司BP&IT項目組.從上上個月成立開始開發BP&IT軟體.這個月開始測試我悲劇的發現他盡然不支援我電腦上的IE11.半個多月還沒解決
我們先來分析下原因首頁 登陸頁面正常瀏覽 http://hr.bingjun.cc/
登陸後網址呈現 http://hr.bingjun.cc/(F(0-MEj-fnv8v-hWRGI2rOhfQ_0SZjQAnMEBs5P1DKcEhwdX-TTu8TAZ_H6HVGorBM-TaTm4zK_DCSdO8gvqOXWCoou4YJIVziHJ1PC9hke7w1))/Default.aspx
點擊任何網頁任意一個連結
鍵 值
Referer http://hr.bingjun.cc/MyTask/MyTaskPage.aspx
就302 http://hr.bingjun.cc/
對網址http://hr.bingjun.cc/(F(0-MEj-fnv8v-hWRGI2rOhfQ_0SZjQAnMEBs5P1DKcEhwdX-TTu8TAZ_H6HVGorBM-TaTm4zK_DCSdO8gvqOXWCoou4YJIVziHJ1PC9hke7w1))/Default.aspx
分析我們可以發現可以輕易發現.這是一個使用無Cookie模式的網址連結.並且F打頭可以判斷我們的BP&IT項目組使用了Forms表單驗證
而跳轉頁面卻是一個http://hr.bingjun.cc/MyTask/MyTaskPage.aspx不帶無Cookie URL的頁面這樣就導致了Cookie丟失就更別論依靠Cookie工作的 Session 和 登陸狀態了
為什麼頁面跳轉後卻沒有帶上CookieURL了 我想是因為他們的代碼沒有使用 伺服器路徑“~/” 所導致 因為只有使用伺服器路徑ASP.NET才會幫我們自動的吧CookieUrl段給帶上
發現後立即詢問BP&IT項目組為什麼我的IE11無法使用內部網站(回答我是微軟的BUG)
盡然是這樣那根據我所掌握的知識能導致此問題的BUG 應該是ASP.NET把 IE11識別為無Cookie 瀏覽器了
那這樣的話解決辦法就很多 首先從伺服器層級講起
我們知道ASP.NET識別瀏覽器是不是無Cookie的是通過本身的一個庫來識別的那我們也可以往這個庫裡加點東西
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers
開啟此目錄可以發現下面後很多檔案沒錯這就是ASP.NET用來識別瀏覽器的庫了開啟ie.browser
添加一個 browser 配置節點
<browser id="IE11" parentID="Mozilla"> <identification> <userAgent match="Trident\/7.0; rv:(?‘version‘(?‘major‘\d+)(\.(?‘minor‘\d+)?)(?‘letters‘\w*))(?‘extra‘[^)]*)" /> <userAgent nonMatch="IEMobile" /> </identification> <capture> <userAgent match="Trident/(?‘layoutVersion‘\d+)" /> </capture> <capabilities> <capability name="browser" value="IE" /> <capability name="layoutEngine" value="Trident" /> <capability name="layoutEngineVersion" value="${layoutVersion}" /> <capability name="extra" value="${extra}" /> <capability name="isColor" value="true" /> <capability name="letters" value="${letters}" /> <capability name="majorversion" value="${major}" /> <capability name="minorversion" value="${minor}" /> <capability name="screenBitDepth" value="8" /> <capability name="type" value="IE${major}" /> <capability name="version" value="${version}" /> </capabilities> </browser>
這樣該伺服器上v4.0.30319版本下的所有網站此問題都算是解決了
2 BP&IT的還說過他們找到過在伺服器上改設定檔的解決方案他們不敢用 伺服器上網站太多怕崩潰 哎~~不知道怎麼說他們
不知道ASP.NET Config設定檔 網站的都可以追加或覆蓋全域的嗎?(PS:在上面那個路徑的Config下的都是全域配置)
既然是可以覆蓋那在項目裡建立個瀏覽器檔案不就OK了 至於怎麼建立瀏覽器檔案這個應該不用我說了吧(部落格園的圖片盡然要外鏈要不我加幾個步驟進來了)
3 如果這也閑麻煩或者怕以後還會有類似的不識別的瀏覽器那就修改cookieless的值吧
開啟web.config 添加或修改System.web下的節點
<sessionState mode="InProc" cookieless="UseUri" customProvider="DefaultSessionProvider"> <providers> <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> </providers> </sessionState> <authentication mode="Forms"> <forms cookieless="UseUri" loginUrl="~/Account/Login" timeout="2880" defaultUrl="~/" /> </authentication>
配置 cookieless="UseCookies" 這也所有的瀏覽器不管瀏覽器支不支援Cookie 都使用瀏覽器Cookie 而不是URLCookie(話說你們見過不支援Cookie的瀏覽器嗎?PS:我麼見過)
到這兒我想也差不多了吧
PS:IE11出現 ——_doPostBack未定義 也是瀏覽器不識別的問題哦 不過不是以為瀏覽器不識別Cookie而是以為他不支援Javascript通過最開始的2個方法一樣的解決上的重點是在配置中加入如下2句
<capability name="javascript" value="true" /> <capability name="cookies" value="true" />
(PS:你們見過不支援Javascript的瀏覽器嗎?我沒見過..這微軟..搞毛!預設成都支援多好不支援才寫設定檔不很好嘛)