跨域情况下SameSite属性对Cookie的作用

前提假设

  1. 假设前端页面的运行地址为 http://localhost:8848/demo-cors/index.html,后端接口的运行地址为 http://127.0.0.1:10071/domain-one/method-a。注意,对 cookie 来说, domain=127.0.0.1domain=localhost 是不同的,可以认为是两个域名。

响应的情况

  1. 后端设置cookie时如果没有显式的指定 domainpath ,那么默认是后端项目的上下文地址,例如,对于 http://127.0.0.1:10071/domain-one/method-a 来说就是 domain=127.0.0.1path=/domain-one 。当这种cookie返回给前端时,前端是能接收到的,但是在开发者工具中的application.cookies中并不能查看到该cookie,注意,这不是因为 127.0.0.1localhost 域名不同导致的没有显示,而是浏览器没有将该 cookie 进行保存。
  2. cookie 没有设置 SameSite 属性的情况下,浏览器默认会把该属性设置为 Lax 。如果要改变上面提到的默认行为,让浏览器能够保存第三方的 cookie ,我们需要在设置 cookie 时显式的将 SameSite 属性设置为None,并将Secure属性设置为true
  3. 对什么是第三方cookie解释一下,例如,前端运行的地址是 http://192.168.0.199:8848/demo-cors/index.html,而cookiedomain=192.168.0.100,那么对于该网站地址来说,这个cookie就是第三方cookie,反过来说,这个网站地址对于这个cookie来说就是第三方网站。

请求的情况

  1. 当第三方网站对cookie的来源站发起请求时,SameSite=Nonecookie能够被携带并发送出去,SameSite=LaxSameSite=Strict有其各自的规则,所以在跨域情况下并且对cookie有操作时,建议把cookieSameSite设置为None,注意SameSite设置为None的同时一定要把Secure属性设置为true

SpringBoot中如何设置SameSite属性

ResponseCookie rc = ResponseCookie.from("hjf", "jinf")
        .secure(true)
        .sameSite("None")
        .build();
response.setHeader(HttpHeaders.SET_COOKIE,rc.toString());

参考: SameSite cookies.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值