最近在使用前后端分离开发的时候,遇到了一个诡异的问题,无论如何设置跨域,同一个页面获取到的session始终不一致。

发现问题:

登录界面前后端分离,ajax提交登录时出错
验证码接口和登录接口的session不一致(跨域问题)
在网上搜索跨域问题,重新设置,问题依旧

错因排除:

ajax允许cookie(已经设置 xhrFields: { withCredentials: true} )
springboot尝试设置了多种跨域方法(springboot解决跨域)

深入分析:

使用其它浏览器(firefox, ie),session却是一致的

对比chrome和firefox请求头和响应头:

firefox:首次发起请求后,服务端返回sessionId后,之后每次请求中的cookie都会带上sessionId。
chrome:请求头始终未携带sessionId,甚至整个cookie都为空,导致服务器每次都接受不到sessionId,每次都会重新分配 一 个 session。

探寻解决方案:
在配置类中设置SameSite=null:

@Configuration
public class SpringSessionConfig {@Beanpublic CookieSerializer httpSessionIdResolver() {DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();...cookieSerializer.setSameSite(null);...}
}

注意,你的项目如果未做session分布式管理,可能需要引入以下依赖才能使用上述类。至于不同Chrome版本号的问题可以参考这篇文章:关于解决Chrome新版本中cookie跨域携带和samesite的问题处理

<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-core -->
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId><version>2.1.4.RELEASE</version>
</dependency>

最终解决方案:
继续查找资料的时候,幸运的找到了github上对于该问题的探究:New cross-site cookie not ‘SameSite’ warning in Chrome

看到其中的一条解决方案: 禁用chrome samesite。方法如下:
1.在chrome中打开链接: chrome://flags/#site-isolation-trial-opt-out,搜索samesite

2.将上述三个选项禁用(设为disable)后重启chrome,问题解决

总结:
存在即合理,SameSite的设计初衷是为了防止CSRF攻击,禁用SameSite实际上并没有解决问题,属于下下策。这里提供一下我的理解,SameSite为了防止CSRF攻击,加强了对cookie的管理,防止用户带着cookie去访问第三方网站,而这又涉及到了跨域问题。然而,我们不可能要求用户像我们一样去禁用新版chrome的SameSite,目前的建议就是在header中设置samesite,即上述的response.setHeader("Set-Cookie", "HttpOnly;Secure;SameSite=None")后,使用https传输cookie。

解决新版chrome跨域问题:cookie丢失以及samesite属性问题相关推荐

  1. 解决新版chrome浏览器SameSite属性cookie拦截问题

    解决新版chrome浏览器SameSite属性cookie拦截问题 问题现象: 由于升级了新版chrome浏览器后,发现系统正常iframe嵌套.AJAX,Image从以前的跨站会发送三方 Cooki ...

  2. 【跨域】一篇文章彻底解决跨域设置cookie问题!

    一篇文章彻底解决跨域设置cookie问题! 大家好我是雪人~~⛄ 之前做项目的时候发现后端传过来的 SetCookie 不能正常在浏览器中使用. 是因为谷歌浏览器新版本Chrome 80将Cookie ...

  3. 解决getJSON跨域登录Session丢失的问题

    解决getJSON跨域登录Session丢失的问题 参考文章: (1)解决getJSON跨域登录Session丢失的问题 (2)https://www.cnblogs.com/linyechengwe ...

  4. 关于跨域获取cookie问题的解决

    关于跨域获取cookie问题的解决 参考文章: (1)关于跨域获取cookie问题的解决 (2)https://www.cnblogs.com/whoamme/p/3598889.html 备忘一下.

  5. CP=CAO PSA OUR 用P3P header解决iframe跨域访问cookie

    短信模块以iframe方式嵌入系统,系统登录时,短信登录失败,这种情况只在win7下IE出现,win10未出现. 原因:IE禁止iframe跨域访问cookie 解决方案: 在短信登录时,进行如下设置 ...

  6. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  7. 十秒解决开发环境跨域问题——取消浏览器同源策略

    解决开发环境跨域问题方法有很多,设置代理什么的略显繁琐:接下来介绍一个十秒解决开发环境跨域问题的方法--取消浏览器同源策,解决所有跨域问题,以谷歌浏览器为例. 一:Windows ①:关闭浏览器 ②: ...

  8. 使用Spring Session和Redis解决分布式Session跨域共享问题

    大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...

  9. 后端传输流跨域_Java开发中解决Js的跨域问题过程解析

    这篇文章主要介绍了Java开发中解决Js的跨域问题过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主流方法有JSONP和CORS两种,这里记 ...

  10. 前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式

    演示Demo站点 http://sso.exrick.cn 开源版Github地址 https://github.com/Exrick/x-boot) 开发文档 https://www.kanclou ...

最新文章

  1. 分析与设计(AD)简介(2)
  2. 阿里二面:GET 请求能传图片吗?
  3. 统计计量 | 协方差和相关系数的暧昧关系:共性与个性
  4. office2016word 每次打开都有进度条问题 解决方式
  5. Smalidea无源码调试 android 应用
  6. 阿里云物联网平台专题讲座
  7. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类...
  8. python视频网站源码_随便撸源码分享:教你如何用Python Flask 构建微电影视频网站视频教程...
  9. 行业首份社会责任报告诞生,满帮如何写下价值新注脚?
  10. 易语言学习笔记(1)
  11. 【FPGA学习笔记】初次使用FPGA硬件编程编程语言Verilog编写HDL程序03
  12. 复合型网络拓扑结构图_网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)....
  13. OJ刷题 |超大目标值(1亿)求质数个数问题
  14. 7、Callable接口
  15. 肤色检测(Skin-Detection)
  16. Try hack me——永恒之蓝——ms17-010
  17. RANS VS LES
  18. 嵌入式软件开发工程师--笔试经验分享
  19. umy-ui表格如何获取滚动条高度
  20. ROI Pooling(感兴趣区域池化)

热门文章

  1. 共享一个从字符串转 Lambda 表达式的类(2)
  2. nice和renice命令详解
  3. 一网打尽Android UI 控件教程
  4. tar.xz如何解压:linux和windows下tar.xz解压命令介绍
  5. 我常用的crontab命令
  6. 最佳学习方法(11)评价自己的学习
  7. 高度设置为100%无效的解决办法
  8. jquery :eq选择器和eq()方法的用法与比较
  9. 2.企业安全建设指南(金融行业安全架构与技术实践) --- 金融行业的信息安全
  10. 23.MySQL 函数