Как читать основной файл cookie из поддомена с существующим куки-файлом поддомена в PHP?

Мне нужно использовать файлы cookie основного домена для моих дочерних доменов, как с более высоким приоритетом, когда существуют сухие и главные файлы cookie домена.

Проблема в том, что я нахожусь на sub.domain.com и существуют файлы cookie для

  • sub.domain.com
  • .domain.com

Глобальный $_COOKIE PHP содержит $_COOKIE['data'] == 'sub.domain.com' . Я хотел бы проверить, есть ли файл cookie .domain.com и использовать его.

Как я могу прочитать основной файл cookie, когда я нахожусь в подчиненном домене с существующим куки-файлом поддомена?

Похоже, что суть вашей проблемы – чтение файла cookie в домене.com с сайта sub.domain.com.

Добавить

session.cookie_domain = .domain.com

на ваш php.ini чтобы это произошло. Если вы находитесь в среде общедоступного хостинга и не можете изменить свой ini-файл, попробуйте сделать это где-нибудь в своем коде:

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

Теперь вы должны иметь доступ к файлам cookie, установленным domain.com на subdomain.domain.com.

Существует переменная $_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; }