Chrome 中 Set-Cookie SameSite 问题

一起跳舞吧 等级 653 0 0

关于 “Chrome 修改对未设置 SameSite 的 cookie,视作 SameSite:Lax 处理的变更” 的问题,目前看,最妥善的解决方案还是按照规矩办事儿,目前 Chrome 是行动最快的,而 FireFox 和 Edge 也在积极跟进,持支持态度。


影响范围:

如果你的项目中有如下跨域场景:

  1. 跨域的 ajax 请求;
  2. 跨域嵌入的 iframe;
  3. 跨域的图片资源请求;
  4. 跨域的 POST FORM 表单;

如果存在这类跨域场景,且在服务端接收请求的时候,需要使用流量中的 cookie,则需要注意:这个 cookie 在设置的时候,是否明确有: SameSite:None; Secure 这两个属性。如果没有的话,就会受到此策略影响。

例子:

a.com 的页面中,加载 b.com 的 iframe,且希望 iframe 请求的流量中,携带 b.com 的 cookie,用其中的 login_token 作为登录凭证。

+------------------+               +-----------------+
|      a.com       |               |      b.com      |
|  +------------+  |  cookie:      |                 |
|  |            |  |  login_token  |                 |
|  |  <iframe>  +----------x----------->             |
|  |            |  |               |                 |
|  +------------+  |               |                 |
+------------------+               +-----------------+

              +----------------------------------------------------------+
              |  Set-Cookie: login_token=x.xxxxxx; path=/; domain=b.com  |
              +----------------------------------------------------------+ 

如果此 token 的 cookie 在设置的时候,未指明 SameSite:None; Secure 这两个属性,如:

set-cookie: login_token=x.xxxxxx; path=/; domain=b.com 

则实际请求中,不会携带 login_token 这条 cookie,因此,iframe 实际处于未登录状态。

其他场景,如 Ajax,与此同理。


变更:

在旧策略中,当 set-cookie 时不显式声明 SameSite 时(或只声明 SameSite,未使用 Secure 时),浏览器会自动视为 SameSite:None,即不限制 cookie。此时上面场景中的 cookie 是可以正常发送的。

在新策略中,如上场景,会视为 SameSite:Lax,即只有在特定情况下,才会携带 cookie。上面场景中的 iframe 的请求中,不会携带 cookie。


解决

最正当的解决方法,就是在对需要跨域发送的 cookie 进行 set-cookie 的时候,显式声明 SameSite:None; Secure 属性,如:

set-cookie: ck01=vl01; Path=/; Secure; SameSite=None 

通过此种方法,允许 cookie 随跨域流量发送。

否则,只能通过调整域、以及携带参数的方式解决。

临时的解决方案,可以暂时让出现问题的浏览器,通过设置解决,方式如下:

  1. 在 chrome 地址栏输入 chrome://flags

Chrome 中 Set-Cookie SameSite 问题

1.png

  1. 在配置项中,搜索 samesite

Chrome 中 Set-Cookie SameSite 问题

2.png

  1. 将以下几项,设置为 disabled

Chrome 中 Set-Cookie SameSite 问题

3.png

  1. 重启浏览器

相关资料

本文转自 https://www.jianshu.com/p/76d026cc4dd7,如有侵权,请联系删除。

收藏
评论区

相关推荐

Chrome 中 Set-Cookie SameSite 问题
关于 “Chrome 修改对未设置 SameSite 的 cookie,视作 SameSite:Lax 处理的变更” 的问题,目前看,最妥善的解决方案还是按照规矩办事儿,目前 Chrome 是行动最快的,而 FireFox 和 Edge 也在积极跟进,持支持态度。 影响范围: 如果你的项目中有如下跨域场景: 1. 跨域的 ajax
JavaCookie的使用
1.cookie是什么? cookie是web应用当中非常常用的一种技术,用于储存某些特定的用户信息。 2.cookie的作用? 在用户登陆时将用户的信息存放在cookie中,用户在一定的时间中再次登陆时不需要输入用户名和密码直接跳转到下一个界面。 3.设置cookie Cookie cookie = new
2018.3.29 网页中嵌套网页的两种方法
第一种: <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">         <title></title>     </head>     <body>         <marquee direction="right" style="color:
CentOS 7安装chrome浏览器
centos 7 安装 chrome步骤如下: 1、进官网下载chrome rpm 格式安装包,下载地址 [https://www.google.cn/chrome/](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.google.cn%2Fchrome%2F) Down
Chrome 80 中 Iframe 跨域 Cookie 的 Samesite 问题
新项目要嵌入之前的一个项目,而且该被嵌入项目之前提供给第三方使用,他们也是用的iframe。以前都是好的,但是现在发现要是iframe的地址和父级的地址不同源,项目登录时无法设置cookie。 一开始以为后端出问题了,后来换火狐、ie edge 都是可以的,并且其他人的Chrome也有可以用的。 并且接口设置cookie时提示:“this set-coo
Extjs 中的cookie设置
发现Extjs中有两个cookie 其一:设置cookie如下 saveacct=isForm.getForm().findField('itemselector').getValue();  Ext.util.Cookies.set('saveacct',saveacct);  取cookie中数据如下 var validS
IE iframe cookie问题(p3p)
前段时间碰到一个问题,就是在IE下,使用iFrame嵌入页面时,该页面的会话级别的cookie无法写入,导致服务端始终无法获取JSESSIONID,每次都是产生一个新的,使得Session无法使用。 **只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。** ASP直接在头部加了头部申明,测试有效。
IE iframe跨域访问cookie丢失解决方法
问题描述:IE浏览器加载Iframe跨域访问后Cookie丢失,用户登录状态失效 解决方法:在PHP中加入以下代码即可解决 header("Access-Control-Allow-Origin:*"); header("Access-Control-Allow-Credentials: true"); head
IE下 iframe子页面document.documentElement报错问题(未指明的错误。)
测试环境:IE8  jquery1.11.1 问题描述: 如果使用了<iframe>,并且在iframe页面中用到了jquery,那么在加载iframe页面时会报错.(未指明的错误) 经过排查,错误来自红色部分 "focus": function( elem ) {     return elem === document.activeE
JS编辑器获取选择内容的HTML多浏览器兼容性写法(支持Chorme、Firefox)
**昨天突然兴起,准备完善[秋色园](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cyqdata.com%2F)后台的编辑器关于Chrome、FireFox下的选择内容的HTML兼容处理。** **JS编辑器获取选择内容的HTML兼容性写法问题描述:** 对于如何获取选择的文本
Jmeter在chrome浏览器中录制脚本
利用blazemeter插件可以录制chrome浏览器中的操作,并生成jmx文件,导入到jmeter中使用 **1、  下载blazemeter**         地址:https://pan.baidu.com/s/1VRVv4ZQ9B2U\_y2p22NNqhA **2、  安装插件** 将文件拖到 chrome->更多工具->扩展程序 中 插
Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放
1\. 操作Cookie ============ 有时候我们想要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。 WebDriver操作cookie的方法: > get\_cookies():获得所有cookie信息
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器 ![复制代码](https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif) /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器 ![复制代码](https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif) /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模
Springboot应用中设置Cookie的SameSite属性
`Cookie`除了`key`和`value`以外有几个属性。 * `httpOnly` 是否允许js读取cookie * `secure` 是否仅仅在https的链接下,才提交cookie * `domain` cookie提交的域 * `path` cookie提交的path * `maxAge` cookie存活时间 * `s