IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

news/2024/5/20 2:47:46/文章来源:https://blog.csdn.net/weixin_34302798/article/details/85637373
原文:IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

  

  你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6、7、8、9下都跑的好好的,唯独到了IE10、11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次。那么,我们就来看看,这个问题的前因后果。

  先说下这2次的使用场景,一次是在某页面中,先存Cookie,然后再入库记录相关数据,但是发布到生产环境后,入库操作没有发生;后来通过打印日志发现问题卡在这里:

if (Request.Browser.Cookies)

  也就是说,在客户端是IE10的环境下,这里返回False!纳尼,IE10默认配置下不支持Cookie?微软你玩我的吧。

  第二次是某地市的升级测试,在IE10的环境下,自服务网站登录失败;这个问题很奇怪,因为之前已经升级过多个地市了,IE10使用都正常。这极大的引起了码农的兴趣,由此引出了此文。

  描述完场景,我们就来分析分析。虽然直觉告诉码农,可能是Cookie的读取或写入有问题,但毕竟直觉这玩意儿不靠谱,咱还是得用事实和证据说话。国际惯例,先抓个HTTP包瞧瞧:

上图是IE10下登录失败时,服务端返回的HTTP响应头;下图是其它浏览器正常登录时,服务端返回的HTTP响应头,注意红色框框标注部分;

导致问题的直接原因,很清晰了吧:服务器响应请求时,没有回发 Set-Cookie 头,没有这个头,客户端浏览器就无法写入Cookie。所以基于Form认证(在Cookie中会存入加密票据)的自服务网站,会无法登录。

  这时,你可能会觉得奇怪了,为啥只有IE10、IE11 会这样,其它IE浏览器跑的妥妥的呢?嗯,为了满足你的好奇心,我们继续分析。

  如果你的机器上装了.NET的FrameWork,打开这个目录 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers。科普下,文件夹里面的.browser文件是全局访问的,用于标识发出请求的浏览器,并标识这些浏览器具备的功能。如果要做定制修改(比如针对特定移动设备),只需把相应的.browser文件复制到应用程序的\App_Browsers文件夹中修改即可。先用记事本打开 ie.browser 这个文件,

注意图中标注为红色部分的正则表达式;然后再来看看,微软公布的IE10的User-Agent : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0),MSIE版本号由以前的1位数字(5-9)变成了现在的2位数字(10),很明显,无法匹配上面的正则了吧。所以,由于无法正确识别IE10的User-Agent,所以ASP.NET把它看做是未知的浏览器,认为它不支持Cookie,由此而产生了一系列与Cookie相关的问题。

    问题的根本总算是知道了,那么该如何解决呢?

      其实这个问题已经经过微软官方确认,是IE10的Bug,其实也可以认为是ASP.NET 2.0、3.5、4.0的Bug,因这些版本都无法识别 IE10的User-Agent。微软专门发布了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 

      码农单位的很多Windows服务器都会自动更新安装补丁,所以场景2中说的其它地市使用正常,其实是因为这些服务器已经打上了补丁,一些新上架、重装系统的服务器或自动更新没有设置的服务器就很可能会出现这类问题。。。
  如果对服务器没有操作权限或者不想打补丁这么麻烦,比如码农我,也可以在网站的根目录,新增一个浏览器定义文件,步骤如下:

1、添加一个"App_Browsers"文件夹 ;

2、添加一个"*.browser"后缀的文件,如 IE10.browser;

3、在文件中添加如下内容(下面的配置表示,对所有的设备和浏览器,都支持Cookies):

<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>  

这是针对某个站点的配置,如果既不想打补丁又想对服务器上的所有站点做全局配置,要如何处理呢?很容易,其实上面已经明示,问题是出在ie.browser 这个文件的配置上,所以我们只需在原来的基础上,加上这一串 "\d{2,}$",使ASP.NET 能识别IE10的User-Agent就可以了。修改后的配置如下:

<capability name="majorversion" match="^[6-9]|\d{2,}$" />

修改完后,再到命令行下将修改后的 .browser 文件编译成程序集并安装到GAC中,如果是Windows Server 2008、Win7,要以管理员身份运行命令行:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regbrowsers.exe -i

 

  如果是IE11,由于其User-Agent "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko" 变化更大,所以需把下面这串加入来做匹配:

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko -->
<browser id="IE11Preview" parentID="Mozilla"><identification><userAgent match="Trident/(?'layoutVersion'\d+).*rv:(?'revision'(?'major'\d+)(\.(?'minor'\d+)?))" /><userAgent nonMatch="MSIE" /></identification><capabilities><capability name="browser"              value="IE" /><capability name="layoutEngine"         value="Trident" /><capability name="layoutEngineVersion"  value="${layoutVersion}" /><capability name="isColor"              value="true" /><capability name="screenBitDepth"       value="8" /><capability name="ecmascriptversion"    value="3.0" /><capability name="jscriptversion"       value="6.0" /><capability name="javascript"           value="true" /><capability name="javascriptversion"    value="1.5" /><capability name="w3cdomversion"        value="1.0" /><capability name="ExchangeOmaSupported" value="true" /><capability name="activexcontrols"      value="true" /><capability name="backgroundsounds"     value="true" /><capability name="cookies"              value="true" /><capability name="frames"               value="true" /><capability name="javaapplets"          value="true" /><capability name="supportsCallback"     value="true" /><capability name="supportsFileUpload"   value="true" /><capability name="supportsMultilineTextBoxDisplay" value="true" /><capability name="supportsMaintainScrollPositionOnPostback" value="true" /><capability name="supportsVCard"        value="true" /><capability name="supportsXmlHttp"      value="true" /><capability name="tables"               value="true" /><capability name="supportsAccessKeyAttribute"    value="true" /><capability name="tagwriter"            value="System.Web.UI.HtmlTextWriter" /><capability name="vbscript"             value="true" /><capability name="revmajor"             value="${major}" /><capability name="revminor"             value="${minor}" /></capabilities>
</browser>

   三板斧搞定!

  幸福来的就是这么突然~~~ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_762000.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于泰捷商城项目与如何做一个高可用的网站

2019独角兽企业重金招聘Python工程师标准>>> hi 各位&#xff0c; 上两周一直都在做泰捷商城这个项目。这个项目的目的就是卖泰捷出品的WEBOX。这是我第一次做有关电子商务的网站。各种头绪。其实原始需求很简单&#xff0c;只卖一件商品&#xff0c;每星期只卖一次…

linux上关闭tls1.0协议,NGINX禁用TLS1.0和TLS1.1使网站更安全

一、为什么要禁用 TLS1.0、TLS1.1&#xff1a;SSL 由于以往发现的漏洞&#xff0c;已经被证实不安全。而 TLS1.0 与 SSL3.0 的区别实际上并不太多&#xff0c;并且 TLS1.0 可以通过某些方式被强制降级为 SSL3.0。由此&#xff0c;支付卡行业安全标准委员会(PCI SSC)强制取消了支…

JSP 网络书签按钮聚合网站

1. http://www.jiathis.com/ JiaThis是一个提供网页地址收藏、分享及发送的WEB2.0按钮工具&#xff0c;网站的浏览者可以方便的分享到人人网、开心网、QQ空间、新浪微博等一系列社会化关系网络站点。 是一个网络书签按钮聚合网站&#xff0c;类似国外的Addthis。 JiaThis™“…

讨论标志设计的全英文论坛形式的网站--界面设计

转载于:https://www.cnblogs.com/kaixinniu/archive/2008/09/28/1301163.html

可进行JavaScript代码测试与调试的12个网站

概述&#xff1a;JavaScript是网站前端开发最为重要的一门编程语言&#xff0c;本文收集了能够在线测试与调试JavaScript代码的12个网站 1、JS Bin JS bin是一个为JavaScript和CSS爱好者们提供特定情况下的代码片段测试的网站。它可以让你和你的同伴合作调试代码。你可以在这里…

分享15款精美的免费 HTML5 网站模板

在过去的几年&#xff0c;网页设计和制作人员就已开始关注和使用 HTML5 了&#xff0c;如今 HTML5 得到了更加广泛的应用&#xff0c;国外有很多网站已使用 HTML5 技术制作。之前的文章和大家分享过精美的HTML5企业网站和HTML5个人网站&#xff0c;大家可以去欣赏一下这些作品。…

(转)Web自动化测试之12306火车票网站自动登录工具

原文地址&#xff1a;http://www.cnblogs.com/TankXiao/archive/2012/02/20/2350421.html还记得2011年春运&#xff0c;12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票通过前两篇博客Fiddler教程和HTTP协议详解&#xff0…

分享7个老师们常备的资源网站

教师较常用的网址&#xff0c;通常基本都是资源、通过自学形式的网址&#xff0c;这样的网址我们可以用于通过自学提升自己。 这儿就来分享7个教师常备的资源网&#xff0c;个个基本都是经典&#xff0c;一下子都给你哦。 1、我要自学网 较为知名的一个自学网站&#xff0c;这儿…

网站文件系统发展分布式文件系统fastDFS

网站文件系统发展 1、单机时代的图片服务器架构 初创时期由于时间紧迫&#xff0c;开发人员水平也很有限等原因。所以通常就直接在website文件所在的目录下&#xff0c;建立1个upload子目录&#xff0c;用于保存用户上传的图片文件。如果按业务再细分&#xff0c;可以在upload目…

网站前端_EasyUI.基础入门.0005.使用EasyUI Accordion组件的最佳姿势?

1. 基础的手风琴<div id"a" class"easyui-accordion" data-options"width:500,height:300"><div data-options"iconCls:icon-ok,title:about,bodyCls:accordion_padding"><h3 style"color:#0099FF;">Acco…

Jekyll – 基于纯文本的开源静态网站 博客系统

Jekyll 是一个开源的静态网站 & 博客生成工具&#xff0c;类似 WordPress。但是和 WordPress 又有很大的不同&#xff0c;原因是 Jekyll 只是一个生成静态网页的工具&#xff0c;不需要数据库支持。但是可以配合第三方服务&#xff0c;例如disqus。最关键的是 Jekyll 可以免…

给你一个网站,你该如何测试?你需要记住这4条法则!

我想大多数开始进行web端页面测试的人&#xff0c;一开始会的都是在页面上点点点&#xff0c;然后一看到页面上有什么图片失效啊&#xff0c;页面遮挡就觉得是找到了大bug&#xff1b;一开始我也是这样&#xff0c;尽管我很谨慎&#xff0c;很仔细&#xff0c;把页面上的每一个…

软件测试人员和QA必须关注的15个网站,值得收藏!

相信大家在学习的时候&#xff0c;不管学什么&#xff0c;都会习惯性地寻找各种学习资源。在大家自学软件测试的时候&#xff0c;也不会例外。那么&#xff0c;软件测试网站有哪些&#xff1f;我们到底应该如何精通软件测试呢&#xff1f;我们不妨一探究竟。 日常学习除了在一…

错误配置 MongoDB 数据库:微软招聘网站曝数据泄露安全漏洞

微软刚刚为自家移动版招聘网站封堵了一个注册用户信息泄露漏洞&#xff0c;以帮大公司追索错误配置部署的MongoDB在线数据库而知名的安全研究人员Chris Vickery发现了这一问题&#xff08;且与他此前的多个发现类似&#xff09;。此前&#xff0c;Vickery曾帮MacKeeper找到了泄…

JAVA笔记26-网络编程(不等于网站编程)

一、网络基础&#xff08;TCP/IP详解&#xff09; 1、IP协议&#xff08;Internet Protocol&#xff09;&#xff1a;网络层&#xff0c;支持网间数据报通信。无连接数据报传送&#xff0c;数据报路由选择和差错控制。 IPv4 32位&#xff08;4字节&#xff09;&#xff0c;IPv6…

如何使用nuget管理C#网站项目

2019独角兽企业重金招聘Python工程师标准>>> 接手C#的项目团队后&#xff0c;发现历史遗留的项目dll管理有些混乱&#xff0c;各个开发人员名下的项目有很多自定义dll或者是很老版本的dll文件&#xff0c;往往一个项目从vss拉下来后无法生成成功&#xff0c;提示缺少…

2017淮北计算机会考,2017年安徽淮北高中会考报名网站:淮北教育局

淮北高中会考报名网站&#xff1a;淮北教育局【导语】每个人都会面临大大小小的考试&#xff0c;有可能这一辈子都会逃脱不了考试的命运。无忧考网整理了淮北高中会考报名网站信息。希望对各位有些帮助。参加2017年安徽淮北高中会考的考生可点击进入《淮北教育局》进行淮北高中…

网站品牌列表效果 jQuery效果

用户进入页面时&#xff0c;品牌列表是默认的精简显示的如下图&#xff1a; 单击商品列表下方的查看全部按钮来显示全部的品牌&#xff0c;同时推荐品牌的文字会高亮显示&#xff0c;按钮里面的文字也变成“收起查看” jQuery 代码如何&#xff1a; <script type"text/…

BCrypt加密怎么存入数据库_「安全」3种常用的信息加密技术,让网站固若金汤...

2011年12月被曝的CSDN密码泄露事故中,网站安全措施不力,导致用户数据库被黑客“拖库”并不稀奇&#xff0c;令人错愕的是数据库中的用户密码居然是明文保存&#xff0c;导致密码泄露&#xff0c;成为地下黑市交易的商品。通常&#xff0c;为了保护网站的敏感数据&#xff0c;应…

一键seo提交收录_想让百度100%收录你的页面?那就进来看看

没有收录就没有SEO收录是SEO的第一步&#xff0c;收录越多才有可能获得更高的SEO流量。最近&#xff0c;由于百度收录机制变的更加严格&#xff0c;很多站长发现网站收录变少了、变慢了、甚至不收录了。站长平台提交不能提升收录你可能做了sitemap&#xff0c;也在百度站长平台…