如何将cookie发布到其他链接?

时间:2011-08-21 22:41:30

标签: javascript cookies cross-domain

有没有办法使用javascript发布特定域(例如.example.com)的所有Cookie(Cookie名称,值和过期时间)? 。我拥有我需要从POST发送cookie的域名,但我想将它们发布到其他域名(例如example2.com)。在发布cookie后我还需要将客户端重定向到特定的链接,所以我认为可能需要一些ajax

注意:我不需要在不同的域上读/写cookie。我只需要将当前域的cookie名称/值/ exp发送/传输到不同的域作为HTTP POST值

3 个答案:

答案 0 :(得分:2)

您可以使用document.cookie访问Cookie。但是,这只会为您提供名称和价值 - 我无法(我知道)获取Cookie的到期日期。它包含一个包含所有cookie的字符串,格式为name1=value1; name2=value2; name3=value3;

可以使用cross-domain XHR将其作为POST请求发送到另一个域,但如果您不需要读取请求的HTTP响应,则提交表单就足够了。只需创建一个不可见<form>,其方法属性设置为“post”,action属性设置为另一个域的URL,target属性设置为不可见iframe的id,将Cookie添加为{{ 1}},并提交表格。

<input>

使用JavaScript动态创建<iframe id="foo" style="display: none"></iframe> <form id="bar" method="post" target="foo" action="http://www.someotherdomain.com/handle_cookies.php"> <input id="cookies" type="hidden" name="cookies" /> </form> <script type="text/javascript"> document.getElementById('cookies').value = document.cookie; document.getElementById('bar').submit(); </script> <iframe>可能更好,而不是用HTML编写,但是我太懒了,不能在凌晨2:30写出来,抱歉: p

注意:如果在SSL上访问第一个域,确保与其他域的连接也通过SSL,否则您将通过SSL传输安全的Cookie HTTP作为纯文本。您可以从其他域的网址中删除方案部分(例如<form>而不是//www.someotherdomain.com/handle_cookies.php),使其使用与发送Cookie时使用的方案相同的方案。我强烈建议你这样做。

答案 1 :(得分:0)

该链接描述了一种接近要求的方法。但它使用window.name属性而不是cookies来发送数据。

谷歌缓存副本,因为原始链接被查封工作了一段时间。

Using window.name transport for cross-site POST scripting

答案 2 :(得分:-1)

我认为由于安全原因,您无法读取/写入其他域的Cookie。您可以应用cookie的特定路径,例如root之外的特定文件夹。我认为浏览器的工作方式是他们为他们当前访问的网站找到cookie,并相应地使用它们。但允许cookie成为跨域可能会产生许多威胁。我想,如果你真的想要,我不能保证这样的事情能够完全发挥作用。

如果您在另一个域上构建一个脚本,该脚本将基于触发器编写cookie,然后您使用类似PHP cURL的内容将页面带入您正在使用的域中,此时您可以调用cookie来自其他领域。这是纯粹的理论,虽然不是我测试的东西。这个想法是因为你拥有这两个域,它假设你也可以访问这两个托管服务器。因此,你需要两端的东西互相合作才能做你想做的事情,而不是希望单方面的解决方案。

参考:http://www.quirksmode.org/js/cookies.html