跨站Cookie的SameSite属性原理及相关问题咨询
问题1
当Cookie设置了SameSite=strict属性时,是否仅在页面域名与服务器域名匹配,或者请求来自该Cookie所属页面的情况下才会被发送?
是的。SameSite=strict的Cookie仅会在「同站请求」中被发送——也就是当前页面的URL域名,和请求目标服务器的域名完全一致(属于同一站点),或者请求是从该Cookie所属的同站页面主动发起的(比如点击同站内的链接、提交同站内的表单)。任何跨站场景下(比如从其他域名的页面发起对该Cookie所属服务器的请求),这个Cookie都不会被浏览器附带发送。
问题2
Cookie是与其被设置时所在的页面相关,还是与设置它的服务器相关?
Cookie完全和设置它的服务器绑定,和设置时所在的页面无关。浏览器会根据Set-Cookie响应头里的Domain属性(如果没指定则默认是设置该Cookie的服务器域名)来存储Cookie,之后只有向该域名(或其子域名,若指定了Domain且符合规则)发起请求时,才会判断是否发送这个Cookie。
问题3
场景:
- 页面page.com向服务器server.com发起请求
- 服务器server.com返回的响应头中包含
Set-Cookie: name=value; SameSite=strict
请问该Cookie会在以下哪种情况被发送:
- 当请求来自该Cookie被设置时所在的页面,即从page.com向server.com发起请求时
- 当页面域名与服务器域名相同时,即从page.com向page.com发起请求时
- 当页面域名与设置该Cookie的服务器域名相同时,即从server.com向server.com发起请求时
- 浏览器会阻止该Cookie被设置
只有第3种情况会发送:
- 情况1:page.com和server.com属于跨站域名,
SameSite=strict的Cookie不会在跨站请求中发送; - 情况2:该Cookie绑定的是server.com,page.com的请求目标是自身服务器,和这个Cookie无关,不会发送;
- 情况3:当前页面域名与Cookie绑定的服务器域名一致,属于同站请求,Cookie会被正常发送;
- 情况4:浏览器不会阻止设置该Cookie,只要server.com的响应符合Cookie设置规则,Cookie会被正常存储。
问题4
场景:
- 页面page-1.com向服务器server.com发起请求
- 服务器server.com返回的响应头中包含
Set-Cookie: cookie-1=value; SameSite=none; Secure - 页面page-2.com向服务器server.com发起请求
- 服务器server.com返回的响应头中包含
Set-Cookie: cookie-2=value; SameSite=none; Secure
请问:
- 若从page-3.com向server.com发起请求,cookie-1和cookie-2这两个Cookie会被发送吗?
- 若步骤2和步骤4中的Cookie名称相同,它们会互相覆盖吗?
解答:
- 会被发送。
SameSite=none的作用就是允许Cookie在跨站请求中被发送,只要请求是HTTPS协议(因为指定了Secure属性),不管发起请求的页面是page-1.com、page-2.com还是page-3.com,向server.com发起请求时这两个Cookie都会被浏览器附带发送。 - 会互相覆盖。两个Cookie的绑定域名都是server.com(未指定
Domain时默认是设置Cookie的服务器域名),同一域名下的同名Cookie,后设置的那个会覆盖之前的,和设置时的来源页面无关。
内容的提问来源于stack exchange,提问作者George Manlove
相关产品推荐
相关产品推荐

