使用我的网站移动到其他服务器,我面临着php会话的严重问题。我可以从我的chrome dev控制台检查它,当我使用setcookie()
时会发送cookie,但是使用session_start()
不会留下通过服务器发送到浏览器的cookie的痕迹。
将网站放在子域上,我已经尝试提供真正的子域名:
ini_set('session.cookie_domain', 'real.subdomain.net');
session_set_cookie_params( 0, "/", "real.subdomain.net", false, false);
我发现有些人遇到同样的问题,他们可以通过更改会话保存路径来解决问题:
ini_set('session.save_path', realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
对我来说都不适用。我没有收到任何错误或通知。
phpinfo()
会话部分没有任何线索,我看起来就像其他人一样。
解决方法
我为这种情况找到了一些解决方法,其中“普通”cookie正在运行但不是会话cookie:
if ( isset($_COOKIE[session_name()]) ) {
session_id($_COOKIE[session_name()]);
session_start();
} else {
session_start();
setcookie(session_name(), session_id());
}