【问题标题】:Unable to access cookies set by another Domain in IE无法访问 IE 中另一个域设置的 cookie
【发布时间】:2012-01-16 01:22:06
【问题描述】:

我正在使用 cookie.js 库从本地 HTML 文件中设置 cookie,如下所示

$.cookies.set("Demo","Dummy Data");

我正在尝试使用以下代码从另一个域获取 cookie 值

alert($.cookies.get("Demo")); 

但它让我返回 null。
请帮我解决这个问题

【问题讨论】:

  • 也许我不明白你在做什么......但你无法从其他域获取 cookie 值 - cookie 被沙盒化以确保安全。

标签: javascript jquery cookies


【解决方案1】:

这是设计使然。您只能获取在当前域上设置的 cookie 的值。

由于网络浏览器内置的安全措施,您所要求的内容是不可能的。

最好的选择是发出一个可以跨域的 JSONP AJAX 请求。

【讨论】:

  • 恐怕不行,浏览器没那么容易上当。这是一件非常好的事情,否则我可以访问您存储在浏览器上的所有持久登录;)
  • @RoryMcCrossan 假设我嵌入了网站,我想在 iframe 中访问其 cookie。是否可以通过在 iframe 中编写脚本标签将 cookie 发送给自己?
  • 假设您可以访问 iframe 内的网站,那么是的,这是可能的。虽然通过电子邮件将 cookie 发送给自己似乎很奇怪,因为无论如何您都可以直接访问它?
【解决方案2】:

您无法读取其他域设置的 cookie。

【讨论】:

    【解决方案3】:

    看看这个关于跨域 cookie 的线程: Cross domain cookies

    基本上,这是一项安全功能。如果 domain.com 设置了 cookie,则 domain1.com 不应该有任何访问权限,否则您可以获得任何网站的身份验证令牌和其他内容。

    【讨论】:

      【解决方案4】:

      不幸的是,它返回 null 因为来自另一个域的 cookie 不可访问。这是一项安全功能。

      例如,考虑您的某个网站的会话 cookie。如果我可以通过另一个域上的 JS 访问该 cookie,那么我的恶意网站(我诱骗您访问)就可以获取该会话信息并将其提供给某些黑客。然后,黑客更有可能劫持您的会话。太常见了,没有其他措施来确保所使用的会话由同一个人使用,因此黑帽所需要的只是 ID 和瞧 - 您对网站的总访问权限。假设您在一个窗口中登录了您的银行,然后在另一个窗口中打开了我被黑的邪恶网站……现在我也许可以访问您的银行帐户。哎呀!

      所以 - 这是不可能的,而且有充分的理由!

      【讨论】:

        【解决方案5】:

        确实,由于 SOP (Same Origin Policy),这是不可能的。

        您可以使用跨域方法解决此问题,例如:postMessage、JSONP、xmlHttpRequest 或 iframe 等等。

        但是,您必须关注安全问题。这个播客解释how to breack cross domain barrier。下面的帖子也为您的问题提供了解决方案。

        Stackoverflow 帖子

        1. How do I set cookies from outside domains inside iframes in Safari?;
        2. Resizing an iframe based on content;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-06
          • 2012-11-08
          • 2011-10-09
          • 2018-02-25
          相关资源
          最近更新 更多