如何跨两个不同的域使用Cookie?

我需要用一个cookie在两个不同的域之间共享SSO信息,这可以用PHP来完成吗?

在这两个域上,放置一个图像或从其他域中拉出的其他Web元素。 使用该URL通知其他域的用户X位于域A上,并让域B将该用户的ID与其系统上的该用户相关联。

要正确执行有点复杂,但是如果你认真考虑的话,它会发挥得很好。

温科在评论中指出(谢谢!)我不应该理所当然地理解所涉及的安全风险。 如果这个信息对任何人都是有价值的,那么你应该确保你使用适当的encryption,authentication等来避免释放敏感信息,并避免各种攻击(重放,中间人等)。 这不应该是太繁重,因为你控制两个网站,你可以select一个安全的秘密密钥,因为通信只通过这个特殊的URL在两个服务器之间。 请记住它。

-亚当

如果你有两个站点使用相同的域名,并希望在他们之间共享cookie,请在settings.php文件中为每个域settings.php如下所示:

 ini_set('session.cookie_domain', '.EXAMPLE.com'); 

一定要包括领先的'。' 之前的域名,否则将无法正常工作。

这使用户可以在为全域范围的Cookieconfiguration的任何站点之间保持login状态。

这也可能有负面影响,所以不要这样做,除非您熟悉所有涉及您想在其间共享Cookie的网站所涉及的Cookie。

你不这样做,cookie被绑定到一个域。 这有限制,它被称为跨站点脚本。

现在,为您的问题提供一些帮助。 你可以做的是创build一个脚本,以帮助弥合他们。

您可以全局重写所有到第二个站点的链接,都需要从第一个站点获取cookie信息。

你可以将所有的cookies从site-a保存到一个他们都可以读取的数据库中,然后以编程方式在所有到site-b的链接上追加cookie-id查询string,然后查找该cookie的ID并重新设置cookie新的领域。

有一个非常好的PHP数据库抽象库( PHP的ADODB ),它有一个会话共享插件,使所有这一切变得更加容易。

我不确定安全的影响,但有一个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的variables方向。; 该文档没有提及是否能够或不能在不同的域上设置cookie。

在这个相同的主题上有一个不同的堆栈溢出线程 ,但我不认为它已被充分回答。

那么,如果你的域名只是不同的子域名,你可以通过创build一个.yourdomain.com cookie来以简单的方式做到这.yourdomain.com 。 然后,Cookie将与所有子域中的所有请求一起传递。

如果您想在不同的域之间共享cookie,并不是那么简单,因为浏览器将其视为安全风险。

确切的例子是什么?

如果使用Google Analytics(分析)和其他跟踪图片等软件,则可能会被迫使用P3P标头让浏览器知道您在发送Cookie时不关心安全性。 然后,一个请求图像的浏览器获取一个cookie作为响应的一部分,并检查P3P。 如果一切正常,则会将Cookie保存在硬盘驱动器上,并且下一次请求位于您网站上的图像(但是是其他域页面的一部分)时,浏览器将一起发送Cookie。 但我想这不会帮助;-)

我从来没有直接使用过域名的cookie值。