我需要使用cookie在两个不同的域之间共享SSO信息,这可以用PHP完成吗?
答案 0 :(得分:17)
在两个域上,放置从其他域中提取的图像或其他Web元素。使用URL通知其他域用户X在域A上,并让域B将该用户ID与其系统上的该用户相关联。
正确执行有点复杂,但如果你认为它会很好地运作。
Vinko在评论中指出(谢谢!)我不应理所当然地认为你了解所涉及的安全风险。如果此信息对任何人都有任何价值,那么您应该确保使用正确的加密,身份验证等,以避免发布敏感信息并避免各种攻击(重放,中间人等)。这不应该太麻烦,因为你控制两个网站,你可以为两者选择一个安全的密钥,因为通信只通过这个特殊的URL在两个服务器之间进行。但请记住这一点。
- 亚当
答案 1 :(得分:2)
如果您有两个使用相同域名的网站并希望在他们之间共享Cookie,请在settings.php
文件中为每个域设置类似的内容:
ini_set('session.cookie_domain', '.EXAMPLE.com');
请确保包含前导'。'在域名之前,或者它不起作用。
这允许用户维护为域范围cookie配置的任何站点之间的登录状态。
这也可能产生负面影响,因此除非您熟悉要在其间共享Cookie的网站所涉及的所有Cookie,否则请勿这样做。
答案 2 :(得分:1)
您没有,cookie绑定到域。这有限制,它被称为跨站点脚本。
现在,为您的问题提供一些帮助。 你可以做的是创建一个帮助桥接它们的脚本。
您可以全局重写到第二个站点的所有链接,这些链接将需要来自第一个站点的cookie信息。
您可以将所有来自site-a的cookie保存到他们都可以读取的数据库中,然后以编程方式在所有到site-b的链接上附加cookie-id查询字符串,然后查找该cookie id并重新设置新域名下的cookie。
有一个非常好的PHP数据库抽象库(PHP ADODB),它有一个会话共享插件,使所有这一切变得更容易。
答案 3 :(得分:1)
好吧,如果您的域名只是不同的子域名,您可以通过创建.yourdomain.com
Cookie轻松完成。然后,cookie将与所有子域中的所有请求一起传递。
如果您想在不同域之间共享Cookie,并不是那么简单,因为浏览器将其视为安全风险。
具体的例子是什么?
对于某些软件,如Google Analytics和其他跟踪图片等,您可能会被迫使用P3P标头让浏览器知道您在发送Cookie时不关心安全性。然后,请求图像的浏览器获取cookie作为响应的一部分,并检查P3P。如果一切正常,它会将cookie保存在硬盘驱动器上,下次您请求位于您网站上的图像(但是是其他域页面的一部分)时,浏览器将发送cookie。但我想这没有用; - )
我从未在域名中直接使用过cookie值。
答案 4 :(得分:1)
我不确定安全隐患,但有一个Apache设置允许您更改cookie的域。
# in httpd.conf (or equivalent)
php_value session.cookie_domain mydomain.com
我已成功将此方法用于子域,但从未尝试过针对不同的域。
还有一种方法可以在http://us.php.net/manual/en/function.session-set-cookie-params.php中描述的PHP中设置变量方向。该文档未提及在不同域上设置cookie的能力或能力。
在同一主题上有一个不同的Stack Overflow thread,但我认为它没有得到足够的回答。