chrome浏览器跨域Set-Cookie之SameSite问题

Cookie Set chrome 使用 浏览器 跨域 SameSite 问题 bcom SameSite=None 编程技术
发布日期 2022-09-05 更新日期 2022-09-05 阅读次数 261 文章字数 1.0k

使用chrome浏览器访问 a.com,而 a.com 请求了 b.com 的资源。(有可能是ajax,也有可能是 iframe,jsonp,跨域图片 ,跨越表单等)

此时,b.com 响应了 Set-Cookie: PHPSESSID=klg1e5p01tl59sovdfr58t5slm; path=/

chrome提示:

此Set-Cookie标头未指定"SameSite"屋性,它默认为'sameSite=Lax"并被阻止,因为它来自跨站点响应,而不是对顶级导航的响应。必须为此Set-Cookie设置"SameSite=None"才能实现跨站点使用。

然后,试了一下以下写法(php73以后):

setcookie('cross-site-cookie', 'name', ['samesite' => 'None', 'secure' => false]);

然后,再看看chrome提示:

尝试通过Set-Cookie标头设置Cookie时被阻止,因为它具有"SameSite=None"用性,但没有使用"SameSite=None"所必需的"Secure"属性。

如果使用了 secure,则必须为 https 链接,也就意味着 b.com 必须是https。先把上面的 setcookie 中 secure 改为 true,然后 b.com 开启 https ,且在 a.com 请求时使用 https://b.com/xxx

然后发现,响应的 Set-Cookie 成功了。对比效果:

解释:

在chrome 80版本以上, 会默认开启same-site策略

samesite有以下几个值

  • Lax : 对同源、顶级域的请求才可以携带cookie (等价于same-site)
  • Strict: 对同源请求才可以使携带cookie (等价于same-origin)
  • None: 对于cookie的使用无限制,随便使用(但是需要 https 连接)

在 php73 以上,setcookie支持 samesite 属性,当然你也可以使用 header 函数设置:

header("Set-Cookie: 键=值; expires=过期时间; path=/; domain=.sina.net; SameSite=None; Secure");

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome/8') !== false) {
 
    $expireTime=gmdate("D, d M Y H:i:s", time()+SID_COOKIE_EXPIRE)." GMT";
    header("Set-Cookie: SID=".$mailSid."; expires=".$expireTime."; path=/; domain=.sina.net;  SameSite=None; Secure");
 Secure");
}

文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-44.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

Cookie Set chrome 使用 浏览器 跨域 SameSite 问题 bcom SameSite=None

发表评论

相关推荐
朱丰华   |   1年前   |   git

git push -u参数是什么意思?--set-upstream

244    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

95    评论    点赞
朱丰华   |   1年前   |   html · <

html浏览器当前tab标签切换时触发监听

106    评论    点赞
朱丰华   |   1年前   |   下载 · 请求

idm、浏览器下载发送两次下载请求

137    评论    点赞
朱丰华   |   1年前   |   javascript · js · obfuscator · 混淆

javascript-obfuscator混淆js文件

52    评论    点赞
朱丰华   |   1年前   |   js · 滚动 · html

原生js实现顶部进度条效果

59    评论    点赞
朱丰华   |   1年前   |   linux · 变量 · 环境

linux查看环境变量、设置环境变量

94    评论    点赞
朱丰华   |   1年前   |   浏览器 · cookie

基于浏览器的自动获取cookie方案

120    评论    点赞
朱丰华   |   1年前   |   chrome · 截图 · headless

chrome headless模式网页截图,把html转图片

230    评论    点赞
朱丰华   |   1年前   |   chrome

chrome headless在命令行把html生成pdf

114    评论    点赞
朱丰华   |   1年前   |   js · 浏览器

js字符串的replaceAll浏览器不兼容问题

96    评论    点赞
朱丰华   |   1年前   |   网页 · 提示 · 离开 · 保存 · 事件 · 显示 · < · beforeunload · 浏览器

网页离开提示未保存

64    评论    点赞
朱丰华   |   1年前   |   统计 · 网站 · ip · 访问 · uv · pv · 数据 · 年月日

网站日ip统计、网站日uv统计、网站日pv统计

84    评论    点赞
朱丰华   |   2年前   |   样式 · 用户 · 代理 · css · 填坑 · 浏览器

css填坑,用户代理样式表

185    评论    点赞
朱丰华   |   2年前   |   远程 · 添加 · 查看 · 删除 · git · 地址 · 多个 · url · githubcom · zhufenghua1998

git查看、添加、删除远程地址

63    评论    点赞
朱丰华   |   2年前   |   php · info · < · 样式 · 定义 · > · 替换

自定义phpinfo样式

41    评论    点赞
朱丰华   |   2年前   |   标签 · 打开 · 右侧 · chrome · 当前 · 相邻

chrome标签在当前标签页右侧相邻标签页打开

102    评论    点赞
朱丰华   |   2年前   |   get · body · http · 请求

http之get带body请求

70    评论    点赞
朱丰华   |   2年前   |   年龄 · 随机 · MySQL · 设置 · 时间

MySQL随机设置年龄

92    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞