我已经阅读了许多关于在子域之间传递会话变量的论坛(包括这个论坛),我无法让它工作。有人可以解释我错过的东西吗?
第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“错误:会话变量不可用”; }
很遗憾,我收到了错误消息。我错过了什么?在此先感谢您的帮助。
答案 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 - 因此您可以确定这是服务器端问题
要查看代码的实际结果(而不是根据间接后果进行猜测),请始终提供帮助。