[英]PHP session shared with subdomain
我已经阅读了许多论坛(包括此论坛),这些论坛在子域之间传递会话变量,但我无法使其正常工作。 有人可以解释我所缺少的吗?
在php.ini
文件中:
session.cookie_domain = ".mydomain.example"
经phpinfo()
验证,我正在使用正确的php.ini文件
在www.mydomain.example
页面中,设置会话变量$_SESSION['a']
,通过在下一页调用它来验证它是否出现(确实如此)。 单击链接到sub.mydomain.example
。
sub.mydomain.example
页面检查是否使用以下命令设置了会话变量:
$a = $_SESSION['a'];
if(!isset($_SESSION['a'])){
echo "Error: Session Variable not available";
}
不幸的是,我收到错误消息。 我想念什么?
您必须将会话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']);
}
所以,我转向了另一个方向,并使用了这个有效的条目...
session_set_cookie_params(0, '/', '.mydomain.example');
session_start();
调试。
是你想念的东西。
首先,您必须查看HTTP标头,以查看发生了什么以及实际设置了哪些Cookie。 您可以使用LiveHTTPHeaders Firefox插件或其他工具。 通过此类信息,您可以找到问题所在。 没有它,没人能回答旅游问题“我的课程无效”
它可以证明您在会话设置中正确的域设置的声明。 或反驳。
它可以揭示其他一些错误配置。
它可能显示Cookie被浏览器发送回-因此可以确定这是服务器端问题
查看代码的实际结果 (而不是根据间接结果进行猜测)总是有帮助的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.