如何为另一个域设置cookie

时间:2011-07-20 11:51:13

标签: javascript cookies redirect

假设我有一个名为a.com的网站,当加载此网站的特定页面时,比如页面链接,我想为另一个名为b.com的网站设置一个cookie,然后重定向用户到b.com

我的意思是,在加载a.com/link时,我想为b.com设置一个Cookie并将用户重定向到b.com

我对它进行了测试,浏览器实际上从a.com/link收到了cookie,但它没有将重定向请求中的cookie发送到b.com。这是正常的吗?

我们可以为其他域设置Cookie吗?

11 个答案:

答案 0 :(得分:102)

您无法为其他域设置Cookie。允许这会带来巨大的安全漏洞。

您需要让b.com设置cookie。如果a.com将用户重定向到b.com/setcookie.php?c=value

setcookie脚本可以包含以下内容以设置cookie并重定向到b.com上的正确页面

<?php
    setcookie('a', $_GET['c']);
    header("Location: b.com/landingpage.php");
?>

答案 1 :(得分:44)

与最佳答案类似,但不是重定向到页面而是再次返回会导致糟糕的用户体验,您可以在域A上设置图像。

<img src="http://www.example.com/cookie.php?val=123" style="display:none;">

然后在域名B上,即cookie.php中的example.com,您将拥有以下代码:

<?php
    setcookie('a', $_GET['val']);
?>

Hattip到Subin

答案 2 :(得分:14)

Probaly您可以使用Iframe。 Facebook可能会使用这种技术。您可以阅读有关此here的更多信息。 Stackoverflow使用类似的技术,但使用HTML5本地存储,更多关于它们的blog

答案 3 :(得分:5)

你做不到。这将是一个令人讨厌的安全风险。

答案 4 :(得分:5)

无法为其他域设置Cookie。

如果您想将数据传递到另一个域,可以将其编码到网址中。

a.com  ->  b.com/redirect?info=some+info (and set cookie) -> b.com/other+page

答案 5 :(得分:3)

请参阅RFC6265

  

除非Domain属性,否则用户代理将拒绝cookie   指定包含原点的cookie的范围   服务器。例如,用户代理将接受带有的cookie   来自“example.com”或“foo.example.com”的域属性   foo.example.com,但用户代理不接受带有的cookie   “bar.example.com”或“baz.foo.example.com”的域属性。

     

注意:出于安全原因,许多用户代理都配置为拒绝   对应于“公共后缀”的域属性。例如,   某些用户代理将拒绝“com”或“co.uk”的域属性。   (有关更多信息,请参阅第5.3节。)

但是上面提到的图像/ iframe的解决方法是有效的,但由于其不安全性而不推荐使用。

答案 6 :(得分:2)

如果你有a.my-company.comb.my-company.com而不是a.comb.com,你可以为.my-company.com域发出一个cookie - 它将被接受并且发送到两个域。

答案 7 :(得分:0)

你不能,但......如果你拥有这两个页面,那么......

1)您可以通过查询参数(http://siteB.com/?key=value

发送数据

2)您可以在站点A内创建站点B的iframe,并且可以将帖子消息从一个地方发送到另一个地方。由于站点B是站点B cookie的所有者,它将能够通过处理正确的帖子消息来设置您需要的任何值。 (您应该阻止其他不需要的发件人向您发送消息!这取决于您和您决定使用的机制来防止这种情况发生)

答案 8 :(得分:0)

在此链接中,我们将找到解决方案Link

setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);

答案 9 :(得分:0)

从A发送POST请求。发布请求仅在服务器端,客户端无法访问。

您可以使用CURL(推荐,服务器端)或隐藏的a.com表单(客户端)从b.commethod="POST"发送POST请求。如果您选择后者,则可能希望对JavaScript进行混淆处理,以使用户无法理解该算法并对其进行干预。

b.com上设置网关以设置Cookie:

<?php
    if (isset($_POST['data']) {
        setcookie('a', $_POST['data']);
        header("Location: b.com/landingpage");
    }
?>

如果您想进一步提高安全性,请在两侧(a.comb.com)上实现一个函数(在a.com上进行加密和解密(在{{1}上) })使用加密密码的数据。

如果您尝试做必须绝对安全的事情(例如转移登录会话),请尝试oAuth或从https://api.cloudianos.com/docs#v2/auth中汲取灵感

答案 10 :(得分:0)

这是我用过的。请注意,此cookie在公开(http)中传递,因此不安全。我不将它用于任何需要安全保护的事情。

  1. 站点A生成令牌,并将其作为URL参数传递到站点B。
  2. 站点B获取令牌并将其设置为会话cookie。

您可能可以添加加密/签名来确保此安全。研究如何正确执行此操作。