解决新版chrome跨域问题:cookie丢失以及samesite属性问题
最近在使用前后端分离开发的时候,遇到了一个诡异的问题,无论如何设置跨域,同一个页面获取到的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属性问题相关推荐
- 解决新版chrome浏览器SameSite属性cookie拦截问题
解决新版chrome浏览器SameSite属性cookie拦截问题 问题现象: 由于升级了新版chrome浏览器后,发现系统正常iframe嵌套.AJAX,Image从以前的跨站会发送三方 Cooki ...
- 【跨域】一篇文章彻底解决跨域设置cookie问题!
一篇文章彻底解决跨域设置cookie问题! 大家好我是雪人~~⛄ 之前做项目的时候发现后端传过来的 SetCookie 不能正常在浏览器中使用. 是因为谷歌浏览器新版本Chrome 80将Cookie ...
- 解决getJSON跨域登录Session丢失的问题
解决getJSON跨域登录Session丢失的问题 参考文章: (1)解决getJSON跨域登录Session丢失的问题 (2)https://www.cnblogs.com/linyechengwe ...
- 关于跨域获取cookie问题的解决
关于跨域获取cookie问题的解决 参考文章: (1)关于跨域获取cookie问题的解决 (2)https://www.cnblogs.com/whoamme/p/3598889.html 备忘一下.
- CP=CAO PSA OUR 用P3P header解决iframe跨域访问cookie
短信模块以iframe方式嵌入系统,系统登录时,短信登录失败,这种情况只在win7下IE出现,win10未出现. 原因:IE禁止iframe跨域访问cookie 解决方案: 在短信登录时,进行如下设置 ...
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- 十秒解决开发环境跨域问题——取消浏览器同源策略
解决开发环境跨域问题方法有很多,设置代理什么的略显繁琐:接下来介绍一个十秒解决开发环境跨域问题的方法--取消浏览器同源策,解决所有跨域问题,以谷歌浏览器为例. 一:Windows ①:关闭浏览器 ②: ...
- 使用Spring Session和Redis解决分布式Session跨域共享问题
大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...
- 后端传输流跨域_Java开发中解决Js的跨域问题过程解析
这篇文章主要介绍了Java开发中解决Js的跨域问题过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主流方法有JSONP和CORS两种,这里记 ...
- 前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式
演示Demo站点 http://sso.exrick.cn 开源版Github地址 https://github.com/Exrick/x-boot) 开发文档 https://www.kanclou ...
最新文章
- 分析与设计(AD)简介(2)
- 阿里二面:GET 请求能传图片吗?
- 统计计量 | 协方差和相关系数的暧昧关系:共性与个性
- office2016word 每次打开都有进度条问题 解决方式
- Smalidea无源码调试 android 应用
- 阿里云物联网平台专题讲座
- 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类...
- python视频网站源码_随便撸源码分享:教你如何用Python Flask 构建微电影视频网站视频教程...
- 行业首份社会责任报告诞生,满帮如何写下价值新注脚?
- 易语言学习笔记(1)
- 【FPGA学习笔记】初次使用FPGA硬件编程编程语言Verilog编写HDL程序03
- 复合型网络拓扑结构图_网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)....
- OJ刷题 |超大目标值(1亿)求质数个数问题
- 7、Callable接口
- 肤色检测(Skin-Detection)
- Try hack me——永恒之蓝——ms17-010
- RANS VS LES
- 嵌入式软件开发工程师--笔试经验分享
- umy-ui表格如何获取滚动条高度
- ROI Pooling(感兴趣区域池化)