有没有办法使用javascript发布特定域(例如.example.com)的所有Cookie(Cookie名称,值和过期时间)? 。我拥有我需要从POST发送cookie的域名,但我想将它们发布到其他域名(例如example2.com)。在发布cookie后我还需要将客户端重定向到特定的链接,所以我认为可能需要一些ajax
答案 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
来发送数据。
谷歌缓存副本,因为原始链接被查封工作了一段时间。
答案 2 :(得分:-1)
我认为由于安全原因,您无法读取/写入其他域的Cookie。您可以应用cookie的特定路径,例如root之外的特定文件夹。我认为浏览器的工作方式是他们为他们当前访问的网站找到cookie,并相应地使用它们。但允许cookie成为跨域可能会产生许多威胁。我想,如果你真的想要,我不能保证这样的事情能够完全发挥作用。
如果您在另一个域上构建一个脚本,该脚本将基于触发器编写cookie,然后您使用类似PHP cURL的内容将页面带入您正在使用的域中,此时您可以调用cookie来自其他领域。这是纯粹的理论,虽然不是我测试的东西。这个想法是因为你拥有这两个域,它假设你也可以访问这两个托管服务器。因此,你需要两端的东西互相合作才能做你想做的事情,而不是希望单方面的解决方案。