Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP中的现有子域cookie从子域读取主cookie?_Php_Cookies_Subdomain - Fatal编程技术网

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

如何使用PHP中的现有子域cookie从子域读取主cookie?,php,cookies,subdomain,Php,Cookies,Subdomain,我需要为我的子域使用主域cookie,因为当子域cookie和主域cookie都存在时,优先级更高 问题是当我在sub.domain.com上时,存在针对我的cookies sub.domain.com .domain.com PHP全局$\u COOKIE包含$\u COOKIE['data']=='sub.domain.com'。 我想检查一下是否还有.domain.comcookie并使用它 当我使用现有子域cookie访问子域时,如何读取主cookie?问题的要点似乎是从sub.do

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

问题是当我在sub.domain.com上时,存在针对我的cookies

  • sub.domain.com
  • .domain.com
PHP全局
$\u COOKIE
包含
$\u COOKIE['data']=='sub.domain.com'
。 我想检查一下是否还有.domain.comcookie并使用它


当我使用现有子域cookie访问子域时,如何读取主cookie?

问题的要点似乎是从sub.domain.com读取domain.com中的cookie集

session.cookie\u domain=.domain.com

到您的
php.ini
来实现这一点。如果您在共享主机环境中,并且无法修改ini文件,请尝试在代码中的某个位置使用此选项:

ini_集(“session.cookie_domain”,“.domain.com”)


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

有一个
$\u服务器['HTTP\u COOKIE']
变量,它包含与一个大字符串同名的子域和主域COOKIE变量。在以下简单代码段中,
$cookie\u变量
数组将包含特定变量的两个值:

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;
}
下面是一个获取所有变量的函数:

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;
}

谢谢你们的回答,但这是一个全局性的变化,如果可能的话,我宁愿避免,因为它使会话对所有子域都是全局的。我希望为子域分离会话。我只需要读取主域的部分cookie。我已经能够访问主域cookie,但只有在并没有子域cookie的情况下,服务器才会出于某种原因首选子域cookie。有办法同时读取两个cookie吗?使用
ini_set()
方法应确保配置更改只会在请求期间影响您的站点(如果您担心更改会影响服务器上运行的其他站点)。Jahufar非常感谢!我非常感谢您的参与。在我的情况下,第一次加载时,我的子域中的cookie没有读取主域的cookie,这是一种享受。有时甚至不是第二次加载,但总是第三次加载。这似乎解决了问题。get_http_cookie_variables()函数失败,因为$domains_计数器未初始化。我只是把它全部删除了,因为我对此不感兴趣。