【问题标题】:Dealing with two PHP session cookies?处理两个 PHP 会话 cookie?
【发布时间】:2013-02-26 20:49:08
【问题描述】:

我正在尝试处理两个 PHPSESSID 可可树。一个使用 www 子目录 - 所以 www.mydomain.com - 而另一个使用 .mydomain.com。

就目前而言,该脚本能够设置 cookie 域,但如果在我访问 mydomain.com 之前在 www 子域上运行另一个脚本,则该 cookie 是为 www.mydomain.com 设置的。然后,如果我访问 mydomain.com,则会设置 .mydomain.com 的 cookie。这意味着我可以得到两个 PHPSESSID cookie。

有没有办法确定在这种情况下我正在处理哪个 cookie?

我看过另一个帖子,但没有得出任何结论。

How to handle multiple cookies with the same name?

【问题讨论】:

    标签: php session cookies multiple-instances


    【解决方案1】:

    为什么不直接更改 php.ini 中的会话 cookie 名称?

    session.name = WHATEVER_YOU_LIKE
    

    【讨论】:

    • 因为正在使用的脚本设置 session.name 并且可以使用或不使用 www 子域进行访问。我在示例中给出了 PHPSESSID,因为我觉得它更容易理解问题的本质。
    【解决方案2】:

    您应该将所有流量重定向到两者之一。这将解决您遇到的问题并处理重复的搜索结果。使用 www 或不使用 www。检查第 362 行:

    https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess

    除非您有理由同时使用 www.和。

    【讨论】:

      【解决方案3】:

      将它放在第一个运行的 php 文件的顶部,例如 index.php 或 config.php 文件。在会话开始之前。

      <?php
      
      if(stripos($_SERVER['HTTP_HOST'],'www')===false) {
         ini_set('session.cookie_domain', 'site.com');
      } else {
         ini_set('session.cookie_domain', 'www.site.com');
      }
      
      ?>
      

      这将导致 cookie 仅与 1 个或其他域相关联,这意味着用户可以拥有 2 个名为 PHPSESSID 的 cookie。

      【讨论】:

      • 类似的代码已经到位。 // 如果在没有 www 目录快捷方式的情况下访问该站点。 // 尝试设置 cookie 域。 if (($cnt = substr_count($host = Http::getRequest()->getHost(), '.')) == 1) { $this->_config['session']['option'][' cookie_domain'] = $主机; } elseif ($cnt == 2 && preg_match('/^www[1-4]?\.(.*)$/', $host, $matches)) { $this->_config['session'][ '选项']['cookie_domain'] = $matches[1]; }
      猜你喜欢
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多