如何使用PHP中的现有子域cookie从子域读取主cookie?

时间:2012-03-12 14:57:10

标签: php cookies subdomain

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

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

的Cookie时
  • sub.domain.com
  • .domain.com

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

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

2 个答案:

答案 0 :(得分:4)

您的问题的要点似乎是从sub.domain.com读取domain.com中设置的Cookie。

添加

session.cookie_domain = .domain.com

到你的php.ini来实现这一目标。如果您使用的是共享主机环境且无法修改您的ini文件,请尝试在代码中的某处:

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

您现在应该可以在subdomain.domain.com上访问domain.com设置的Cookie。

答案 1 :(得分: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;
}