跨域cookies

Posted

技术标签:

【中文标题】跨域cookies【英文标题】:Cross domain cookies 【发布时间】:2010-11-08 05:16:29 【问题描述】:

我有一个小问题。

如何为多个域设置 cookie?

我确实了解安全问题,并且我确信以前已经这样做过。原因是 SSO。

即。

account.domain.com 需要设置登录域:

domain.com, domain1.com, domain2.com.

是否有任何简单的方法,使用 php 和 cookie 或任何替代方法?

【问题讨论】:

这是关于 *** 的另一篇文章,展示了 facebook 如何做到这一点,是的,它可以使用 iframe 和 javascript。 ***.com/questions/4701922/… HTTP State Management Mechanism RFC6265 【参考方案1】:

我认为这个解决方案会满足您的需求:“Simple Single Sign-On for PHP”

【讨论】:

【参考方案2】:

您正在尝试的事情无法完成。 (这是浏览器安全问题,而不是 PHP 问题。)

除了使用某种形式的异地身份验证之外,您可以实现的最接近的方法是使 cookie 可以跨子域访问,在这种情况下,您只需使用 PHP 的 set_cookie 函数的可选“域”参数。

【讨论】:

【参考方案3】:

domain.com 绝对没有办法为 domain1.com 设置 cookie。您试图做的事情只能通过让用户的浏览器向每个域提交请求来解决,然后每个域都会设置自己的 cookie。

那么你需要一种方法来为每个域验证用户的身份。有两种方法:

    反向通道 - 站点直接相互联系以确定用户是否已登录。 在 GET 或 POST 中传递令牌 - 当用户的浏览器被重定向到其他站点时,会传递一个包含身份和会话状态的数字签名参数。

这真的很复杂。我建议你不要自己动手。查看SimpleSAMLPHP 了解我所描述的 PHP 实现。

【讨论】:

这是另一种方式,让 domain.com 与 domain1.com 连接并获取令牌,然后将该令牌传递到 JS 调用的标头中或作为单独的字段,然后 domain1.com 应检查该令牌并作出相应的回应。这有意义吗?【参考方案4】:

这可以通过一个域充当主机而其他域充当从属来完成。

假设我们有一个域 accounts.domain.com,它是我们的主人。

那么我们就有了我们的奴隶domain.comsomething.comanother.com

当您登录 domain.com 时,它实际上是站点 accounts.domain.com,然后您将获得一个带有您浏览器唯一 ID 的 cookie,然后您将被重定向到 domain.com 的 post-登录登陆页面(即domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)。登陆页面将联系accounts.domain.com,并使用浏览器ID进行查询。如果交易没问题,那么您将从domain.com 获得登录cookie。

接下来,将在每个域(domain.comsomething.comanother.com)上初始重定向到 accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>。因为我们要回家了(我们已经登录accounts.domain.com),所以我们将再次被重定向到我们的登录页面(<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>),从这一点开始,它与登录的部分相同。我们无缝漫游到另一个域(用户不知道它,因为浏览器通常不会显示重定向页面,直到它通过标头发送(服务器)/接收(浏览器)部分)。

如果实际上没有活动登录,该站点会将这个“否定登录”保存到会话中,并且不再尝试检查登录(直到我们尝试登录或加载另一个域)。

【讨论】:

以上是关于跨域cookies的主要内容,如果未能解决你的问题,请参考以下文章

php中Cookies

PHP基础cookies和session

客户端(浏览器端)数据存储技术概览

我的第三十四篇博客---flask-cookie-sessionsqlchemary

Chrome 提标 您的浏览器限制了第三方Cookie...解决方法

Ajax跨域Json跨域Socket跨域和Canvas跨域等同源策略限制的解决方法