假设我有一个名为的网站a.com
,并且在加载该网站的特定页面(例如页面链接)时,我想为另一个名为的网站设置Cookie b.com
,然后将用户重定向到b.com
。
我的意思是,a.com/link
我想为其设置Cookie b.com
并将用户重定向到b.com
。
我对其进行了测试,然后浏览器实际上从接收到了Cookie a.com/link
,但是它没有在向的重定向请求中发送该Cookie b.com
。正常吗
我们可以为其他域设置Cookie吗?
假设我有一个名为的网站a.com
,并且在加载该网站的特定页面(例如页面链接)时,我想为另一个名为的网站设置Cookie b.com
,然后将用户重定向到b.com
。
我的意思是,a.com/link
我想为其设置Cookie b.com
并将用户重定向到b.com
。
我对其进行了测试,然后浏览器实际上从接收到了Cookie a.com/link
,但是它没有在向的重定向请求中发送该Cookie b.com
。正常吗
我们可以为其他域设置Cookie吗?
Answers:
您不能为其他域设置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");
?>
与最佳答案类似,但是您可以在域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到李苏滨
可能您可以使用Iframe
此功能。Facebook可能会使用这种技术。您可以在此处阅读更多内容。Stackoverflow使用类似的技术,但是使用HTML5本地存储,有关此内容的更多信息,请参见其博客。
无法为其他域设置Cookie。
如果要将数据传递到另一个域,则可以将其编码为url。
a.com -> b.com/redirect?info=some+info (and set cookie) -> b.com/other+page
您不能,至少不能直接。那将是一个令人讨厌的安全风险。
尽管您可以指定Domain属性,但规范中指出:“除非Domain属性为包含原始服务器的cookie范围指定,否则用户代理将拒绝cookie。”
由于原始服务器是a.com
并且不包含b.com
,因此无法设置。
您需要改为b.com
设置cookie。您可以通过(例如)HTTP重定向往返执行此操作b.com
。
evil-hack.com
可能为此设置了Cookie,their-favourite-website.com
从而会更改其在该网站上的偏好。
如果您拥有a.my-company.com
而b.my-company.com
不是公正的域名a.com
,b.com
那么您可以为.my-company.com
域发布Cookie- 它会被接受并发送到两个域。
参见RFC6265:
用户代理将拒绝cookie,除非Domain属性为cookie的范围指定一个范围,该范围将包括原始服务器。例如,用户代理将接受来自foo.example.com的Domain属性为“ example.com”或“ foo.example.com”的cookie,但是用户代理将不接受Domain属性为的cookie。 “ bar.example.com”或“ baz.foo.example.com”。
注意:出于安全原因,许多用户代理配置为拒绝与“公共后缀”相对应的域属性。例如,某些用户代理将拒绝“ com”或“ co.uk”的域属性。(有关更多信息,请参见第5.3节。)
但是,尽管由于不安全,不建议使用上述针对图像/ iframe的解决方法。
您不能,但是...如果您同时拥有两个页面,则...
1)您可以通过查询参数(http://siteB.com/?key=value)发送数据
2)您可以在网站A内创建网站B的iframe,并且可以将发布消息从一个地方发送到另一个地方。由于站点B是站点B cookie的所有者,因此可以通过处理正确的帖子消息来设置所需的任何值。(您应阻止其他不需要的发件人向您发送消息!这取决于您和您决定用来防止这种情况发生的机制)
在此链接中,我们将找到解决方案Link。
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);
从A发送POST请求。发布请求仅在服务器端,客户端无法访问。
您可以使用CURL(推荐,服务器端)或隐藏表单(客户端)将POST请求从发送a.com
到。如果您选择后者,则可能需要混淆JavaScript,以使用户无法理解该算法并对其进行干扰。b.com
method="POST"
建立网关b.com
以设置Cookie:
<?php
if (isset($_POST['data']) {
setcookie('a', $_POST['data']);
header("Location: b.com/landingpage");
}
?>
如果您想进一步提高安全性,请在两侧(a.com
和b.com
)都实现一个功能,以使用加密密码对(上a.com
)和解密(上b.com
)数据进行加密。
如果您要执行必须绝对安全的操作(例如,传输登录会话),请尝试使用oAuth或从https://api.cloudianos.com/docs#v2/auth获得一些启发