假设我有一个名为a.com
的网站,当加载此网站的特定页面时,比如页面链接,我想为另一个名为b.com
的网站设置一个cookie,然后重定向用户到b.com
。
我的意思是,在加载a.com/link
时,我想为b.com
设置一个Cookie并将用户重定向到b.com
。
我对它进行了测试,浏览器实际上从a.com/link
收到了cookie,但它没有将重定向请求中的cookie发送到b.com
。这是正常的吗?
我们可以为其他域设置Cookie吗?
答案 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.com
和b.my-company.com
而不是a.com
和b.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.com
向method="POST"
发送POST请求。如果您选择后者,则可能希望对JavaScript进行混淆处理,以使用户无法理解该算法并对其进行干预。
在b.com
上设置网关以设置Cookie:
<?php
if (isset($_POST['data']) {
setcookie('a', $_POST['data']);
header("Location: b.com/landingpage");
}
?>
如果您想进一步提高安全性,请在两侧(a.com
和b.com
)上实现一个函数(在a.com
上进行加密和解密(在{{1}上) })使用加密密码的数据。
如果您尝试做必须绝对安全的事情(例如转移登录会话),请尝试oAuth或从https://api.cloudianos.com/docs#v2/auth中汲取灵感
答案 10 :(得分:0)
这是我用过的。请注意,此cookie在公开(http)中传递,因此不安全。我不将它用于任何需要安全保护的事情。
您可能可以添加加密/签名来确保此安全。研究如何正确执行此操作。