我有2个不同的域名,我们称之为www.foo.com和bar.foo.com。第一个是用CI构建的,第二个是用Symfony构建的。我想分享我的会话,所以如果我登录其中一个,我可以访问另一个。我使用$_SESSION["session_name"] = "value";
设置会话数据。
如何使会话数据可以从其他域读取?
感谢您的帮助。
答案 0 :(得分:3)
在我理解的原始问题的评论中考虑您的原始问题以及您对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"
如果能解决问题,请告知我们。
祝你好运!答案 1 :(得分:1)
使用session_name
功能让他们拥有相同的会话名称。这适用于子域。
如果它们是完整的不同域,并且如果您使用cookie来传递会话ID,则这将不起作用,因为cookie仅适用于一个域。
答案 2 :(得分:0)
您需要设置会话Cookie的域名,以便可以从两个站点访问它。
<?php
ini_set('session.cookie_domain', '.foo.com');
要么在加载时尽早将其添加到两个站点的PHP代码中,要么将这样的内容添加到两个站点中的.htaccess文件中。
php_value session.cookie_domain ".foo.com"
我不是100%肯定第二种选择有效,但我认为应该这样做。
答案 3 :(得分:0)
会话与服务器中包含会话数据的实际文件相关联。因此,除非站点有共享这些临时会话文件的方法,否则它们无法共享会话。这是除非会话被序列化并发送到另一个站点。我认为唯一的解决方案是实现一个会话,该会话将会话数据存储并存储在两个站点可以访问的外部数据库中。然后,如果server 1
将会话ID发送到server 2
并且server 2
使用它来访问数据库,则它可以访问server 1
答案 4 :(得分:0)
代码点火器可以选择使用它session library,它支持存储你的会话是一个数据库,可能有某种形式的插件,或者你可以建立自己的,为symphony可以读取代码点火器数据库之外的会话,并在symphony中设置会话。
因此,虽然它们在技术上会是两个不同的会话,但数据库会同步它们。
这当然假设您的两个站点使用相同的数据库。