首页 文章

PHP Session与子域共享

提问于
浏览
1

我已经阅读了很多关于在子域之间传递会话变量的论坛(包括这个论坛),我无法让它工作 . 有人可以解释我错过了什么吗?

步骤1在php.ini文件中:session.cookie_domain =“ . mydomain.com”用phpinfo()验证我正在使用正确的php.ini文件

步骤2在www.mydomain.com的页面中设置会话变量$ _SESSION ['a'],通过在下一页(它确实)上调用它来验证它是否出现 . 链接到sub.mydomain.com的链接

sub.mydomain.com上的步骤3页面检查是否使用以下方式设置会话变量:

$ a = $ _SESSION ['a']; if(!isset($ _ SESSION ['a'])){echo“错误:会话变量不可用”; }

不幸的是我收到了我的错误消息 . 我错过了什么?在此先感谢您的帮助 .

3 回答

  • 2

    所以,我走了一个不同的方向并使用了这个有效的条目......

    session_set_cookie_params(0,'/',' . mydomain.com');在session_start();

  • 3

    您必须将会话ID作为cookie传递,并在新域上设置相同的会话ID

    例如,您可以使用此代码

    ini_set('session.cookie_domain', '.example.com');
    $currentCookieParams = session_get_cookie_params();
    
    $rootDomain = '.example.com';
    session_set_cookie_params( 
        $currentCookieParams["lifetime"], 
        $currentCookieParams["path"], 
        $rootDomain, 
        $currentCookieParams["secure"], 
        $currentCookieParams["httponly"] 
    ); 
    
    if(!empty($_SESSION)){
        $cookieName = session_id();
        setcookie('PHPSESSID', $cookieName, time() + 3600, '/', $rootDomain); 
    
    }
    
    if(isset($_COOKIE['PHPSESSID'])){
        session_name($_COOKIE['PHPSESSID']); 
    }
    
  • 3

    调试 .
    是你缺少的东西 .

    首先,你必须观察HTTP标头,看看发生了什么以及实际设置了什么cookie . 您可以使用LiveHTTPHeaders Firefox插件或其他东西 . 有了这样的信息,你可以找到问题 . 没有它,没有人可以回答旅游问题“我的 Session 不起作用”

    它可以在会话设置中证明您的正确域设置声明 . 或者反驳它 .
    它可以揭示一些其他错误配置 .
    它可能会显示浏览器发回的cookie - 因此您可以确定这是服务器端问题

    要查看代码的 actual result (而不是根据间接后果进行猜测)总是有帮助的 .

相关问题