如何为另一个域设置一个cookie
假设我有一个名为a.com
的网站,当这个网站的特定页面被加载时,比如页面链接,我喜欢为另一个名为b.com
网站设置一个cookie,然后将用户redirect到b.com
。
我的意思是,在加载a.com/link
我想为b.com
设置一个cookie,并将用户redirect到b.com
。
我对它进行了testing,浏览器实际上从a.com/link
收到了cookie,但是它没有将该cookie发送到b.com
的redirect请求。 这是正常的吗?
我们可以为其他域设置Cookie吗?
您无法为其他网域设置Cookie。 考虑到这一点会带来巨大的安全缺陷。
您需要让b.com设置cookie。 如果a.com将用户redirect到b.com/setcookie.php?c=value
setcookie脚本可能包含以下设置cookie并将其redirect到b.com上的正确页面
<?php setcookie('a', $_GET['c']); header("Location: b.com/landingpage.php"); ?>
与顶级答案类似,但不是redirect到页面,而是再次导致不良用户体验,您可以在域A上设置图像。
<img src="http://www.example.com/cookie.php?val=123" style="display:none;">
然后在cookie.php中的example.com的域B中,您将拥有以下代码:
<?php setcookie('a', $_GET['val']); ?>
Hattip到Subin
Probaly你可以使用Iframe
来做到这一点。 Facebook可能使用这种技术。 你可以在这里阅读更多。 Stackoverflow使用类似的技术,但与HTML5本地存储,在他们的博客更多
你不能。 这将是一个讨厌的安全风险。
为其他域设置Cookie是不可能的。
如果你想传递数据到另一个域,你可以把它编码到url中。
a.com -> b.com/redirect?info=some+info (and set cookie) -> b.com/other+page
如果您有a.my-company.com
和b.my-company.com
而不是a.com
和b.com
您可以为.my-company.com
域发出一个cookie – 它将被接受并发送给两个领域。
请参阅RFC6265 :
用户代理将拒绝Cookie,除非域属性指定了包含原始服务器的cookie的范围。 例如,用户代理将接受来自foo.example.com的域名属性为“example.com”或“foo.example.com”的cookie,但用户代理将不接受域名属性为“bar.example.com”或“baz.foo.example.com”。
注意:出于安全原因,许多用户代理被configuration为拒绝对应于“公共后缀”的域属性。 例如,某些用户代理将拒绝“com”或“co.uk”的域属性。 (更多信息请参见第5.3节。)
但是上面提到的image / iframe的解决方法是可行的,但是由于其不安全性而不被推荐。