【问题标题】:How to read main cookie from the sub domain with an existing sub domain cookie in PHP?如何使用 PHP 中现有的子域 cookie 从子域中读取主 cookie?
【发布时间】:2014-09-01 12:55:35
【问题描述】:

当子域 cookie 和主域 cookie 都存在时,我需要将主域 cookie 用于我的子域,因为具有更高的优先级。

问题是当我在 sub.domain.com 并且存在用于

的 cookie 时
  • sub.domain.com
  • .domain.com

PHP 全局 $_COOKIE 包含 $_COOKIE['data'] == 'sub.domain.com'。 我想检查是否还有一个 .domain.com cookie 并使用它。

当我在具有现有子域 cookie 的子域上时,如何读取主 cookie?

【问题讨论】:

    标签: php cookies subdomain


    【解决方案1】:

    看起来您的问题的要点是从 sub.domain.com 读取 domain.com 中设置的 cookie。

    添加

    session.cookie_domain = .domain.com

    发送至您的php.ini 以实现这一目标。如果您在共享主机环境中并且无法修改您的 ini 文件,请尝试在代码中的某处添加:

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

    您现在应该能够访问由 domain.com 在 subdomain.domain.com 上设置的 cookie。

    【讨论】:

    • 感谢您的回答,但这是一个过于全局的更改,我希望尽可能避免,因为它使所有子域的会话都全局化。我希望为子域分离会话。我只需要读取主域 cookie 的一部分。我已经能够访问主域 cookie,但只有在没有子域 cookie 的情况下,出于某种原因服务器更喜欢它。有没有办法同时读取两个cookie?
    • 使用ini_set() 方法应该确保配置更改只会在请求期间影响您的站点(如果您担心更改会影响在您的服务器上运行的其他站点)。
    • Jahufar 非常感谢您!非常感谢您的参与。
    • 这在我的情况下很有效,在第一次加载时,我的子域中的 cookie 没有读取主域的 COOKIE。有时甚至不是第二个负载,但总是在第三个负载上。这似乎已经解决了这个问题。
    【解决方案2】:

    有一个$_SERVER ['HTTP_COOKIE'] 变量包含与一个大字符串同名的子域和主域cookie 变量。在下面的简单代码中,$cookie_variable 数组将包含特定变量的两个值:

    if( 'sub.domain.com' == $_SERVER['HTTP_HOST']) {
      $var_name = 'somedata';
      $domains_counter = 0;
      foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) {
        if( false !== strpos($cookie_variable_string, $var_name.'=') ) {
          $cookie_variable[$domains_counter] = urldecode(
              trim(
                  substr(
                      $cookie_variable_string, 
                      strpos($cookie_variable_string, $var_name) + strlen($var_name.'=')
                  )
              )
          );
          $domains_counter++;
        }
      }
      var_dump($cookie_variable);
    }
    

    这是一个获取所有变量的函数:

    public static function get_http_cookie_variables() {
      $domains_counter = [];
      foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) {
        $key_value = explode('=', $cookie_variable_string);
        $cookie_var_name = trim($key_value[0]);
        if(is_null($domains_counter[$cookie_var_name])) {
          $domains_counter[$cookie_var_name] = 0;
        }
        $http_cookie_variables[$cookie_var_name][$domains_counter[$cookie_var_name]] = urldecode(trim($key_value[1]));
        $domains_counter[$cookie_var_name]++;
      }
    
      return $http_cookie_variables;
    }
    

    【讨论】:

    • get_http_cookie_variables() 函数失败,因为 $domains_counter 未初始化。我只是把它全部删除,因为我对此不感兴趣。
    猜你喜欢
    • 2015-05-24
    • 2012-06-25
    • 2011-04-03
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多