公司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的浏览器吗?我没见过..这微软..搞毛!默认成都支持多好不支持才写配置文件不很好嘛)