如何为另一个域设置Cookie

2020/10/24 16:41 · javascript ·  · 0评论

假设我有一个名为的网站a.com,并且在加载该网站的特定页面(例如页面链接)时,我想为另一个名为的网站设置Cookie b.com,然后将用户重定向到b.com

我的意思是,a.com/link我想为其设置Cookieb.com并将用户重定向到b.com

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

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

您不能为其他域设置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来回执行。

如果您拥有a.my-company.com并且b.my-company.com不是正义的a.comb.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.commethod="POST"

建立网关b.com以设置Cookie:

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

如果您想进一步提高安全性,请在两侧(a.comb.com都实现一个功能,使用加密密码对(上a.com)和解密(上b.com)数据进行加密。

如果您尝试做必须绝对安全的操作(例如,传输登录会话),请尝试使用oAuth或从https://api.cloudianos.com/docs#v2/auth获得一些启发

这是我用过的。请注意,此cookie在公开(http)中传递,因此不安全。我不会将其用于任何需要安全的地方。

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

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

本文地址:http://javascript.askforanswer.com/ruheweilingyigeyushezhicookie.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!