如何跨两个不同的域使用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值。