如何使用PHP中的现有子域cookie从子域读取主cookie?
我需要为我的子域使用主域cookie,因为当子域cookie和主域cookie都存在时,优先级更高 问题是当我在sub.domain.com上时,存在针对我的cookies如何使用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
- sub.domain.com
- .domain.com
$\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_计数器未初始化。我只是把它全部删除了,因为我对此不感兴趣。