我有一个小问题。
如何为多个域名设置cookie?
我理解安全性问题,并且确定已经完成过此操作。原因是单点登录(SSO)。
例如:
account.domain.com
需要为以下域名设置登录状态:
domain.com, domain1.com, domain2.com。
是否有使用PHP和cookies或任何替代方法的简单方式?
我有一个小问题。
如何为多个域名设置cookie?
我理解安全性问题,并且确定已经完成过此操作。原因是单点登录(SSO)。
例如:
account.domain.com
需要为以下域名设置登录状态:
domain.com, domain1.com, domain2.com。
是否有使用PHP和cookies或任何替代方法的简单方式?
domain.com绝对无法为domain1.com设置cookie。你正在尝试的只能通过让用户的浏览器向每个域提交请求,然后设置自己的cookie来解决。
然后,您需要一种方法来验证用户的身份。有两种方法:
这真的很复杂。我建议您不要自己实现。看看SimpleSAMLPHP,了解我所描述的PHP实现。
可以通过一个域像主控一样,其他域像从属一样来实现此操作。
比如,我们有一个域 accounts.domain.com,它是我们的主控。
然后我们有三个从属域,分别是 domain.com
、something.com
和 another.com
。
当你登录 domain.com 时,实际上是在网站 accounts.domain.com
上,然后你会获得一个带有浏览器唯一标识符的 cookie,并被重定向到 domain.com 的登录后页面(即 domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>
)。这个登录后页面将联系 accounts.domain.com
,并用浏览器 ID 查询它。如果交易成功,则你将从 domain.com
获得登录 cookie。
接下来,在每个域(domain.com
、something.com
和 another.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>
),从这个点开始,与登录部分相同。我们无缝漫游到另一个域(用户不知道,因为浏览器通常不会显示重定向页面,直到经过了发送服务器的头文件/接收浏览器的部分)。
如果实际上没有活动登录,则站点将将此“负登录”保存到会话中,并且不再尝试检查登录(直到我们尝试登录或加载另一个域)。