所以我在一个类中有这两个函数。一个设置会话,另一个检索它。
function setCookie(){
session_regenerate_id();
session_set_cookie_params($expires, '/', '.'.$_SERVER['SERVER_NAME'], false, true);
session_start();
$_SESSION["example"] = "Example";
}
function getCookie(){
session_start();
if(isset($_SESSION["example"])){
return true;
}else{
return false;
}
}
出于某种原因,当它们被设置时,我只能从example.com域访问它们,但是当我转到www.example.com域时,没有会话集,并且该函数返回false,并且当我得到会话cookie参数时,它们都是默认的。我尝试删除session_regenrate_id()
,它仍然只适用于example.com域,即使我通过另一个'www'域设置会话。我使用与会话中使用的相同参数设置了2个cookie,我可以在任一域上访问它们没问题,但会话只是给我带来问题。任何帮助都会很棒!感谢
答案 0 :(得分:1)
您需要为所有子域设置Cookie。就像你已经尝试过设置正确的主机名非常重要。我认为$_SERVER['SERVER_NAME']
不可靠。
SERVER_NAME
设置为虚拟主机的主机名。由于您使用的子域也意味着vhost,因此两个子域上的服务器名称都不匹配。
function setCookie(){
session_set_cookie_params($expires, '/', '.example.com', false, true);
session_start();
$_SESSION["example"] = "Example";
}
请记住在某处设置$expires
。目前它没有在您的代码示例中设置。