跨域cookie

bea*_*ear 24 php authentication cookies single-sign-on

我有一个小问题.

如何为多个域设置cookie?

我确实理解安全问题,我相信它以前已经完成了.原因是SSO.

即.

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

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

有没有简单的方法,使用PHP和cookie,或任何替代方案?

And*_*ong 29

domain.com绝对没有办法为domain1.com设置cookie.您尝试执行的操作只能通过让用户的浏览器向每个域提交请求来解决,然后这些域将设置自己的cookie.

然后,您需要为每个域验证用户身份.有两种方法:

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

这真的很复杂.我建议你不要自己动手.看一下SimpleSAMLPHP,了解我正在描述的PHP实现.


Joh*_*ker 6

你正在尝试的是无法做到的.(这是一个浏览器安全问题,而不是PHP问题.)

除了使用某种形式的非现场身份验证之外,您可以实现的最接近的是跨子域访问cookie,在这种情况下,您只需使用PHP的set_cookie函数的可选"域"arg .


lmo*_*zis 6

这可以通过一个像主人一样的域和其他像奴隶的域来完成.

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

然后我们得到了我们的奴隶domain.com,something.com并且another.com

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

接下来,在每个域(domain.com,something.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>)上重定向,从这一点来看,它与登录的部分相同.我们无缝漫游到另一个域(没有用户知道它,因为浏览器通常不显示重定向的页面,直到它通过标题发送(服务器)/接收(浏览器)部分).

如果实际上没有活动登录,该站点将保存此"负登录"到会话而不再尝试检查登录(直到我们尝试登录或加载另一个域).