Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为另一个域设置cookie_Javascript_Cookies_Redirect - Fatal编程技术网

Javascript 如何为另一个域设置cookie

Javascript 如何为另一个域设置cookie,javascript,cookies,redirect,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吗?您不能,至少不能直接设置。这将是一个严重的安全风险 虽然可以指定,

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

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

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


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

您不能,至少不能直接设置。这将是一个严重的安全风险

虽然可以指定,但表示“用户代理将拒绝cookie,除非Domain属性为cookie指定一个包含源服务器的范围。”

由于原始服务器是
a.com
,并且不包括
b.com
,因此无法设置


您需要获得
b.com
来设置cookie。您可以通过(例如)HTTP重定向到
b.com
并返回来执行此操作。

您不能为其他域设置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");
?>

无法为另一个域设置Cookie

如果要将数据传递到另一个域,可以将其编码到url中

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

可能您可以为此使用
Iframe
。Facebook可能使用这种技术。你可以阅读更多关于这方面的内容。Stackoverflow使用了类似的技术,但是对于HTML5本地存储,在他们的

上有更多关于这方面的内容,类似于顶部的答案,但不是重定向到页面并再次返回,这将导致糟糕的用户体验,您可以在域a上设置图像

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

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

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


如果您拥有
a.my-company.com
b.my-company.com
而不仅仅是
a.com
b.com
,您可以为
.my company.com
域发布cookie,它将被接受并发送到这两个域。

请参阅:

除非域属性无效,否则用户代理将拒绝cookie 指定cookie的作用域,该作用域将包括源 服务器例如,用户代理将接受带有 来自的“example.com”或“foo.example.com”的域属性 foo.example.com,但用户代理将不接受带有 “bar.example.com”或“baz.foo.example.com”的域属性

注意:出于安全原因,许多用户代理被配置为拒绝 与“公共后缀”对应的域属性。例如 一些用户代理将拒绝“com”或“co.uk”的域属性。 (详见第5.3节。)


但是上面提到的使用image/iframe的解决方案是可行的,尽管由于不安全,不建议使用它。

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

1) 您可以通过查询参数()发送数据


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

在这个链接中,我们将找到解决方案


从a发送POST请求。POST请求仅位于服务器端,客户端无法访问

您可以使用CURL(推荐,服务器端)或隐藏的
method=“POST”
表单(客户端),从
a.com
b.com
发送POST请求。如果您选择后者,您可能希望混淆JavaScript,以便用户无法理解算法并干扰它

b.com
上创建网关以设置cookie:


这是我用过的。注意,此cookie是在开放(http)中传递的,因此不安全。我不会用它做任何需要安全的事情

  • 站点A生成一个令牌并作为URL参数传递给站点B
  • 站点B获取令牌并将其设置为会话cookie

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

    但是a.com在重定向到b.com时可以以标题的形式插入相同的数据,不是吗?为什么这不存在安全漏洞?@Coder,setcookie功能将导致cookie头从b.com发送到浏览器。a、 com无法从b.com发送cookie头。是的,这非常不安全,但确实有效。如果OP拥有a.com和b.com,并且cookie非常琐碎,那么可能就没问题了。最好在回答中注意到这是不安全的,尽管它是有效的。你怎么能这么说呢?但是youtube正在阅读gmail创建的cookie,以便在youtube上显示他们的帐户?iframe非常适合我的解决方案,只需像普通get请求一样将这些值包含在url中,并使用cookie值从服务器响应建议,您必须正确配置访问控制Allow Origin以使其工作。请注意,如果您使用url参数在b.com上设置cookie,然后任何人都可以从任何网站强制b.com上的任何cookie值从url设置会话cookie存在安全风险。URL通常会被记录下来,并允许攻击者窃取用户会话Nice hack…:)当心,这可能是个很坏的主意。你是在故意避开首席运营官
    setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);