如何为另一个域设置一个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.comb.my-company.com而不是a.comb.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的解决方法是可行的,但是由于其不安全性而不被推荐。