zoukankan      html  css  js  c++  java
  • 谷歌8.0版本之后无法携带cookie

    前言

      谷歌最新版本更新之后,突然发现post请求就无法携带cookie了,导致原本可以用sessionId做的登录验证频频提示session过期,谷歌新版本的坑,导致我们排查了好久!

    问题展示图

      但是其他浏览器都正常

      多番查找资料,各种方法例如axios.defaults.withCredentials = true;//设置axios,要求请求必须携带cookie,这类方法都试了一遍,但是还是无法解决,最后参考了 https://blog.csdn.net/weixin_43990297/article/details/107716124,手动设置把谷歌默认对cookie的限制关了,再重启浏览器,就可以获取cookie了,真的巨坑!

      首先如果你用axios,那么先设置withCredentials为true,然后打开谷歌浏览器在Chrome中访问chrome://flags/,搜索SameSite并设置为disabled即可。原因是Chrome升级到80版本之后cookie的SameSite属性默认值由None变为Default,这也就造成了一些访问跨域cookie无法携带的问题!

      最终还是拿到cookie.

     

    其他解决方式

      

      设置了与http://192.168.4.168/的跨站点资源相关联的cookie,但没有设置' SameSite '属性。在未来的Chrome版本中,只有当cookie设置为“SameSite=None”和“Secure”时,才会提供跨站点请求的cookie。你可以在开发者工具下的应用>存储> cookie查看更多细节https://www.chromestatus.com/feature/5088147346030592和https://www.chromestatus.com/feature/5633521622188032。

      就是通过在后端中设置response.setHeader(“Set-Cookie”, “widget_session=abc123; SameSite=None; Secure”),即可允许第三方cookie使用,具体可以参考: https://blog.csdn.net/weixin_44269886/article/details/102459425

    总结

      存在即合理,SameSite的设计初衷是为了防止CSRF攻击,大家看到就谷歌而言就得设置,如果以后其他浏览器也禁止cookie呢?或者用户手动禁止cookie?所以我很早之前都跟其他人说过不要用cookie!不要用cookie!本地数据存储sessionStorage和localStorage不香?这次项目之所以要用cookie完全是后台为了确认第一次登陆输入账户密码和第二次输入软token验证是同一用户,于是我建议改成人工手动生成SessionId在该用户登陆输入密码时返回,然后第二次验证时前端再把该SessionId传回去,就确保两次登陆是同一用户在同一个设备!

      大家切记项目中遇到困难不要死揪着不放,要懂得绕弯,一个方法不行就另寻他路。

  • 相关阅读:
    机器学习:贝叶斯分类器(一)——朴素贝叶斯分类器
    机器学习:kNN算法(二)—— 实战:改进约会网站的配对效果
    机器学习:kNN算法(一)—— 原理与代码实现(不调用库)
    Oracle给表设置自增字段
    IMAP、POP3、SMTP邮件服务器
    网站高并发大流量访问的10个处理及解决方案
    浅谈async/await
    【前端】加载的图片太多或者太大优化方案(上)
    【前端】本地调试H5页面方案总结
    alphafold2_conda版安装
  • 原文地址:https://www.cnblogs.com/zxd66666/p/13448656.html
Copyright © 2011-2022 走看看