PHP Session与子域共享

时间:2010-05-14 15:45:31

标签: php session subdomain

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

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

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

第3步 sub.mydomain.com上的页面检查会话变量是否使用:

设置

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

很遗憾,我收到了错误消息。我错过了什么?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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']); 
}

答案 2 :(得分:2)

调试。
是你遗失的东西。

首先,您必须观察HTTP标头,以查看正在发生的事情以及实际设置的Cookie。您可以使用LiveHTTPHeaders Firefox插件或其他东西。有了这样的信息,你可以找到问题。如果没有它,没有人可以回答“我的会话不起作用”的旅游问题

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

要查看代码的实际结果(而不是根据间接后果进行猜测),请始终提供帮助。