Php 跨域cookie

Php 跨域cookie,php,authentication,cookies,single-sign-on,Php,Authentication,Cookies,Single Sign On,我有个小问题 如何为多个域设置cookie 我确实理解安全问题,而且我相信以前也做过。原因是SSO 即 account.domain.com需要为以下内容设置已登录的域: domain.com, 域名1.com, 域名2.com 有没有简单的方法,使用PHP和Cookie,或者其他方法?我认为这个解决方案会满足您的需要:“您正在尝试的事情无法完成。(这是一个浏览器安全问题,不是PHP问题。) 除了使用某种形式的非现场身份验证之外,最接近的方法是使cookie可以跨子域访问,在这种情况下,您只需使

我有个小问题

如何为多个域设置cookie

我确实理解安全问题,而且我相信以前也做过。原因是SSO

account.domain.com
需要为以下内容设置已登录的域:

domain.com, 域名1.com, 域名2.com


有没有简单的方法,使用PHP和Cookie,或者其他方法?

我认为这个解决方案会满足您的需要:“

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


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

domain.com绝对无法为domain1.com设置cookie。只有让用户的浏览器向每个域提交请求,然后域将设置自己的cookie,才能解决您试图执行的操作

然后,您需要为每个域提供一种验证用户身份的方法。这有两种方法:

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

  • 这真的很复杂。我建议你不要自己滚。看看我所描述的PHP实现。

    这可以通过一个域作为主域,其他域作为从域来实现

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

    然后我们有了我们的奴隶
    domain.com
    something.com
    other.com

    当您登录domain.com时,它实际上是site
    accounts.domain.com
    ,然后您将获得一个具有唯一ID的浏览器cookie,然后您将被重定向到domain.com的登录后登录登录页面(即
    domain.com/logon?check=true&unique ID=&request ID=
    )。登录页将联系
    accounts.domain.com
    ,使用浏览器ID查询。如果事务正常,则您将从
    domain.com
    获取登录cookie

    接下来,在每个域(
    domain.com
    something.com
    other.com
    )上,将初始重定向到
    accounts.domain.com/roaming check?返回url=
    。因为我们要回家了(我们已经登录了
    accounts.domain.com
    ),我们将在登录页(
    .com/logon?check=true&unique id=&request id=
    )上再次被重定向,从这一点来看,它与登录的部分相同。我们无缝地漫游到另一个域(用户不知道它,因为浏览器通常不会显示重定向页面,直到它通过标题发送(服务器)/接收(浏览器)部分)


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

    下面是关于stackoverflow的另一篇文章,展示facebook是如何做到这一点的,是的,使用iFrame和javascript是可能的。这是另一种方法,让domain.com连接domain1.com并获取令牌,然后在JS调用的头中传递该令牌,或者作为单独的字段,然后domain1.com应该检查该令牌并相应地响应。这有意义吗?