zoukankan      html  css  js  c++  java
  • IE、谷歌Cookie记录失败,火狐成功(IE和Firefox下的Cookie兼容问题)

    昨天项目迁移了测试服务器,之后奇怪的问题出现了。

    IE、谷歌无法登陆,火狐可以登陆。

    这个项目先后部署过两个测试服务器、一台正式服务器,登陆都是正常的,这次却突然出现这种奇怪的问题,很是纠结。

    通过查看代码,逻辑很清晰,不应该有问题。

    跟踪浏览器信息,发现登陆逻辑正常执行,最后进行了页面跳转,之后又跳转回来,那么应该是权限验证失败。

    没有抛出无权限提示,那么只能是读取Cookie失败。

    检查IE、谷歌的Cookie记录,发现登陆页面没有完成Cookie写入,这种简单的Cookie操作,.NET不应该会有问题的。

    开始百度,百度垃圾,没找到想要的。

    开始谷歌,找到一个差不多的(服务器的时间和时区设置可能影响Cookie,IE而言,Cookie的有效时间段是理解为客户端的时间与服务器端时间的间隔,对于FireFox而言,Cookie的有效时间完全由服务器端的时间决定

    修改本机时间为昨天,测试,登陆成功,基本确定服务器问题。

    找运维,检查服务器时间时区设置,果然是这个问题。

    修改,登陆成功!

     

    IE和Firefox下的Cookie兼容问题 .

    用Firefox可以登录,使用IE后,部分可以登录,部分不可以登录。最初是怀疑IE的Cookie功能没有打开引起的,测试到最后这个原因也排除了。

     

    既然是通过Cookie实现SSO,那认证必然是保存在Cookie中,Cookie文件就是保存在本地的缓存目录下(firefox下的Cookie是加密的,查不到Cookie文件),但是奇怪的是IE登录后,缓存目录下根本没有发现生成的Cookie文件,这就是不能登录的根本原因。

     

    为什么没有生成Cookie文件呢,要不没有生成,要不生成了又被IE销毁了。前者不可能发生,如果不生成Cookie,那为什么有些浏览器行,firefox更是全部可以,只能怀疑第二个原因,Cookie是被IE自动销毁了,IE销毁Cookie是根据Cookie的生命期,例如,Cookie是2009-01-01 01:00:01生成的,有效时间是5个小时,那到了2009-01-01 06:00:01后,IE就会销毁此Cookie文件。对于IE而言,Cookie的有效时间段是理解为客户端的时间与服务器端时间的间隔,而对于FireFox而言,Cookie的有效时间完全由服务器端的时间决定,Firefox的cookie不依赖于服务器的时间,可见,FireFox是充分考虑到了服务器端与客户端的时差问题。

     

    立即检查系统的时间,发现系统时间和服务器没有差别,有一点纳闷,影响时间的还有一个时区(timezone),果然原因找到,时区设定错误。时区设定不正确也会影响IE对Cookie生命期的计算,因为Cookie的生命期是基于GMT计算的。

     

    原因总结:没有登录成功的IE,是因为没有设定正确的时区和时间,导致IE错误将保存认证信息的Cookie文件自动销毁了,所以无法登录。

  • 相关阅读:
    前端代码美化的艺术
    CSS3 简单的砸金蛋样式
    为什么 VS Code 能迅速占领 JavaScript 开发者社区
    了解并使用 CSS 中的 rem 单位
    CSS中一些利用伪类、伪元素和相邻元素选择器的技巧
    SVG入门指南
    PAT 1035 Password [字符串][简单]
    生信学习-二代测序知乎专栏总结[转]
    PAT 1119 Pre- and Post-order Traversals [二叉树遍历][难]
    生信笔记-mooc【武大】
  • 原文地址:https://www.cnblogs.com/bdstjk/p/2519868.html
Copyright © 2011-2022 走看看