【发布时间】:2018-04-10 08:34:55
【问题描述】:
这里有很多关于 PHP 会话的问题,但似乎没有一个解决方案对我有用。我制作了一个测试脚本来展示这个问题:
session1.php
session_start();
$_SESSION['user'] = 'Test';
header('location: session2.php');
exit;
?>
session2.php
session_start();
print_r($_SESSION);
?>
这是一个非常简单的示例,但是我在我的站点中使用会话来依赖用户是否登录。它工作了一段时间,然后我不得不重新安装我的服务器,它就停止了工作。作为参考,这是我使用的问题,其中有很多可能的解决方案: Session variables not working php
这是我目前尝试过的
- 将
exit;放在标头重定向之后 - 重定向到同一个域,我也尝试将整个 url 放入重定向中,但没有成功。此外,如果您只是输入文件名,它应该会自动执行此操作(根据我的经验)
- 在
php.ini中将session.save_path设置为"/var/lib/php/session" - 确保脚本所有者 (
root) 的完全读/写访问权限,同时确保 root 是所有者ls -ld /var/lib/php/session返回
drwxrwxrwx. 2 root apache 4096 Apr 9 16:55 /var/lib/php/session
- 将
session.cookie_lifetime设置为3600,没有必要,但我可以试试 - 再次将
session.cookie_domain更改为我的域,这应该没有必要,因为默认情况下它会正确执行此操作
到目前为止,这些都不适合我。我希望我忽略了一些简单的事情。
如您所见,$_SESSION 在session2.php 中完全为空。
顺便说一句,我在更改 php.ini 后重新启动了 apache :)
【问题讨论】:
-
你有没有试过使用function_exists()函数session_start()是否存在?
-
检查你的
session_save_path(),对我来说是/var/lib/php5/,需要有777chmod 权限。 -
检查php.net/manual/en/function.session-start.php esp。关于返回值和php版本之间的差异
-
/var/log/apache2/error.log(或站点的日志文件,如果不同)中的任何错误?
-
@KarstenKoop 哇,这实际上是一个很棒的建议。我的日志文件位于
/var/lib/httpd/domains/....。最后几行是Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/home/admin/tmp) in Unknown on line 0。我个人认为这很奇怪,有人知道这是否是某种硬编码的默认会话目录吗?/var/lib/php/sessions中还有其他会话,这才是真正令人困惑的地方。我将相应地设置 session.save_path 并更改权限。
标签: php session session-variables