未在不同子域上设置会话

时间:2014-12-26 20:05:54

标签: php session cookies

所以我在一个类中有这两个函数。一个设置会话,另一个检索它。

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,我可以在任一域上访问它们没问题,但会话只是给我带来问题。任何帮助都会很棒!感谢

1 个答案:

答案 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。目前它没有在您的代码示例中设置。