4

我们遇到了一些 PHP 会话 Cookie 问题,不允许我们登录到我们的 *SugarCRM** 应用程序,它是开源 PHP 应用程序。

问题是我们在 2 个子域上安装了相同的应用程序,如下所示...

主站点
www.domain.com

开发网站
dev.www.domain.com

现在登录一个后,它将不允许您登录另一个!

请查看下图以查看 Cookie 问题...

在此处输入图像描述

在上图中,您可以看到有 2 个 PHPSESSID Cookie 竞争 Session!

如果我现在删除其中一个,它可以让我正常登录而不会出现问题!

因为这是 SugarCRM,所以我希望我可以在不对应用程序进行任何核心文件修改的情况下解决这个问题。但如果我必须这样做,那么我们会的。

那么有人对一个好的解决方案有任何想法吗?

现在我的想法是“Nasty Dirty Hack”,我真的不想这样做。它是在登录表单上制作一个按钮,这个按钮将使用 JavaScript 来清除/删除PHPSESSID Cookies但我真的很想找到一个合适的解决方案。

如果有人有任何想法,请分享?谢谢


更新
感谢到目前为止的答案。请注意,这不是我构建的简单的 PHP 应用程序,我可以轻松地进行代码更改。这是 SugarCRM,它是一个包含数千个文件的大型应用程序

4

5 回答 5

0

尝试使用函数(http://php.net/manual/en/function.session-set-cookie-params.php):

  session_set_cookie_params ( $lifetime, $path, $domain, $secure, $httponly)

并设置一个$domain = '.domain.com'

或者,如果您通过setcookie手动设置会话 cookie ,那么也设置相同的域

于 2013-11-06T13:45:49.983 回答
0

尝试在子域的 .htaccess 参数中设置

php_value session.cookie_domain .domain.com

或在 php 代码中使用,但在“session_start()”之前

ini_set('session.cookie_domain', '.domain.com' );
于 2013-11-06T13:47:46.090 回答
0

使用 session_set_cookie_params

在主域上从子域设置会话。

于 2013-11-06T13:47:47.537 回答
0

自从我遇到这个问题以来已经有一段时间了,但我认为您所要做的就是通过编辑每个 SugarCRM 文件系统中的 config.php 并将每个实例会话文件写入不同的目录并更改行

'session_dir' => '',

指向不同的目录。

于 2013-11-06T16:47:19.327 回答
0

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

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

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

于 2013-11-06T14:30:44.557 回答