【问题标题】:PHPSESSID Cookies on Sub-domains are having conflicts with each other子域上的 PHPSESSID Cookie 相互冲突
【发布时间】:2013-11-17 18:50:32
【问题描述】:

PHP 会话 Cookie 存在一些问题,无法登录我们的 *SugarCRM** 应用程序,该应用程序是开源 PHP 应用程序。

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

主站点
www.domain.com

开发网站
dev.www.domain.com

现在登录一个后,它不会让你登录另一个!

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

在上图中你可以看到有 2 个 PHPSESSID Cookies 竞争 Session!

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

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

那么有人对好的解决方案有什么想法吗?

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

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


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

【问题讨论】:

    标签: php cookies session-cookies sugarcrm


    【解决方案1】:

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

    'session_dir' => '',

    指向不同的目录。

    【讨论】:

      【解决方案2】:

      它实际上不是你需要更改的域,而是“会话名称”(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)

      【讨论】:

        【解决方案3】:

        尝试使用函数(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,那么也设置相同的域

        【讨论】:

          【解决方案4】:

          使用 session_set_cookie_params

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

          【讨论】:

            【解决方案5】:

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

            php_value session.cookie_domain .domain.com
            

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

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

            【讨论】:

              猜你喜欢
              • 2015-03-07
              • 1970-01-01
              • 1970-01-01
              • 2016-08-15
              • 2020-06-29
              • 2020-11-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多