跨多个域共享php Session ($_SESSION)


Sharing php Session ($_SESSION) across multiple domain

我有两个不同的域名,分别叫它们www.foo.com和bar。foo。com。第一个是用CI构建的,第二个是用Symfony构建的。我想要共享我的会话,所以如果我登录其中一个,我可以访问另一个。我用$_SESSION["session_name"] = "value";设置会话数据。

如何使会话数据从其他域可读?

谢谢你的帮助。

考虑到你最初的问题以及你在原始问题的评论中对Logan和我的回答,我明白了:

1 -你想在一个域和它的子域之间传递会话变量;和

2 - CI和Symfony在您有机会执行ini_set命令之前加载会话。

我相信你有两个选择:

1 -在PHP .ini文件

中包含PHP配置命令
session.cookie_domain=".foo.com"

如果你尝试将它包含在。htaccess中,如果你将php作为CGI模块运行,它将不起作用,这似乎在共享主机服务中相当常见。

2 -你可以在你的站点的所有PHP脚本中添加一个文件。这些将放在您的站点运行的每个php脚本之上,甚至是CI和Symfony中的脚本。例如:

phpprepend.php文件
<?php
ini_set('session.cookie_domain', '.foo.com');
?>

在php.ini文件中包含以下行:

auto_prepend_file = "/path/to/file/phpprepend.php"

请让我们知道这是否解决了问题。

祝你好运!

使用session_name函数让它们具有相同的会话名称。这将适用于子域。如果它们是完全不同的域,并且如果您使用cookie来传递会话id,则这将不起作用,因为cookie只适用于一个域。

您需要设置会话cookie的域,以便从两个站点都可以访问它。

<?php
ini_set('session.cookie_domain', '.foo.com');

要么在加载的早期将其添加到两个站点的PHP代码中,要么在两个站点的.htaccess文件中添加类似的内容。

php_value session.cookie_domain ".foo.com"

我不确定第二个选项是否有效,但我认为应该可以。

会话与服务器中包含会话数据的实际文件相关联。因此,除非站点有共享这些临时会话文件的方法,否则它们不能共享会话。除非会话被序列化并发送到另一个站点。我认为唯一的解决方案是实现一个会话,该会话可以在两个站点都可以访问的外部数据库中获取和存储会话数据。然后,如果server 1将会话ID发送给server 2, server 2使用它访问数据库,则可以访问server 1存储的会话数据

Code igniter可以选择使用它的会话库,它支持将您的会话存储为数据库,可能有某种形式的插件,或者您可以构建自己的会话库,用于symphony,它可以从数据库中读取代码点火器会话并在symphony中设置会话。

因此,虽然它们在技术上是两个不同的会话,但数据库将同步它们。

这当然是假设您的两个站点使用相同的数据库。