子域名上的PHPSESSID Cookies之间存在冲突问题

4
我们有一些PHP Session Cookies的问题,无法让我们登录* SugarCRM *应用程序,这是一款开源的PHP应用程序。
问题在于我们在2个子域上都安装了相同的应用程序,如下所示...
主站:www.domain.com 开发站:dev.www.domain.com 现在,在登录一个站点后,它将不允许您登录另一个站点!
请查看下面的图像以查看Cookie问题...
在上面的图像中,您可以看到有2个PHPSESSID Cookie竞争Session!
如果我现在删除其中一个,它会允许我正常登录而没有任何问题!
因为这是SugarCRM,我希望我可以解决这个问题,而不需要对应用程序进行任何核心文件修改。但是如果必须这样做,那么我们将会这样做。
那么,有人有什么好的解决方案吗?
现在我想到了一个“残忍的恶劣黑客”想法,我真的不想这样做。 它是在登录表单上制作一个按钮,此按钮将使用JavaScript清除/删除 PHPSESSID Cookies ,但我真的很想找到一个正确的解决方案。
如果有人有任何想法,请分享? 谢谢
更新: 感谢到目前为止给出的答案。 请注意,这不是我构建的简单PHP应用程序,我可以轻松进行代码更改。 这是SugarCRM,它是一个具有数千个文件的大型应用程序。
5个回答

0

0

实际上,你需要更改的不是域名,而是“会话名称”(cookie参数的名称)。两个应用程序似乎都在使用默认的“phpsessid”,需要使它们不同,否则应用程序将看到彼此的会话,查看错误的会话或尝试反序列化仅在另一个项目中定义的类。

您需要更改存储会话ID的cookie参数。它可以从环境变量(php.ini、.htaccess等)进行控制:http://us1.php.net/manual/en/session.configuration.php#ini.session.name

这样,您就可以在同一域上拥有多个PHP会话。例如,如果您有example.com/sugarcrmexample.com/foo,您可以让sugarCRM将其会话ID存储在名为“sugarsession”的cookie参数中(而不是默认的phpsessid)。


0

这个问题我已经有一段时间没出现了,但我认为你只需要通过编辑每个SugarCRM文件系统的config.php文件并更改以下行:

'session_dir' => '',

将其指向不同的目录,以将每个实例的会话文件写入不同的目录即可。


0

0
尝试在子域名的.htaccess参数中进行设置
php_value session.cookie_domain .domain.com

用于 PHP 代码中,但在 "session_start()" 之前。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接