IE,你有点坑

手头有一个公司单点登录的老项目,其中一个功能是在用户在勾选自动登陆的情况下,登陆成功后在Cookie里面记录一段记录用户状态的加密信息,较长一段时间用户会免密码登录,因为大家都是搞IT的,平常就对IE有天然的抵触,用IE的同学不太多,运行了好几年,也没什么人反馈问题,最近有一个团队的同学找到我,说他们在IE下面每次都需要登录,很影响体验,本来想着让他们用Chrome、Firefox等高级浏览器,一番沟通,他们说他们的系统只能在IE下面才能正常使用,那没辙了,只能帮助其寻找解决问题的方法。

刚开始还真不好确定问题出在什么地方了,Firefox、Chrome检查没有问题,就是用IE会复现之前的描述的问题,当时想难道是说IE不兼容,还是有什么BUG?因为是老代码,看起来很头疼,硬着头皮仔细看了一下代码逻辑,觉得问题还是出在了Cookie上面,如果Cookie写入正常不应该再次让用户登录,观察了一下在IE下面的Cookie信息:

仔细一对比,还真是发现有异常,正常的有EXPIRES参数,但我们写入的没有这个参数,也就是说我们设置的Cookie过期时间压根没有生效,对浏览器的Cookie机制不是很熟悉,所以有些摸不着头脑,看代码明明在Server端设置了Max-Age这个Cookie参数了:

纠结了一天,度娘,谷歌各种查资料,最终还是在微软的官方网站找到了答案:

https://blogs.msdn.microsoft.com/ieinternals/2009/08/20/internet-explorer-cookie-internals-faq/

Soga,Q1就回答了我的疑问,微软的IE并不支持max-age这个参数,所以即便是你写了这个参数IE也并不认识,在关闭浏览器后Cookie就会被清除,后来在另一个地方找到了解决问题的方法:

https://jpanj.com/2017/cookies-max-age-vs-expires/

有了这个思路,我只要在要植入的Cookie后面再追加一个expires参数就行啦,因为max-age的单位是秒(s),而expires后面跟的是一个特定格式的日期,所以我根据max-age这个秒数计算一个过期时间,转换成expires所需要的格式追加在Cookie后面就行啦:

总结:

还是因为我对浏览器的Cookie机制不了解才踩到了这个坑,基础知识不扎实,不过还好,大牛都是一点点成长起来的,遇到问题我们能够想办法去解决,这才是正视问题的思路,一点点的填坑,慢慢的你就会发现你脚下的路变坦途了,我们一起努力,但行好事莫问前程~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180118G001LS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券