Мне нужно использовать файлы cookie основного домена для моих дочерних доменов, как с более высоким приоритетом, когда существуют сухие и главные файлы cookie домена.
Проблема в том, что я нахожусь на sub.domain.com и существуют файлы cookie для
Глобальный $_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; }