PHP 会话故障排除
PHP Sessions Troubleshooting
这里有很多关于 PHP 会话的问题,但是 none 的解决方案似乎对我有用。我制作了一个测试脚本来展示这个问题:
session1.php
session_start();
$_SESSION['user'] = 'Test';
header('location: session2.php');
exit;
?>
session2.php
session_start();
print_r($_SESSION);
?>
这是一个非常简单的示例,但是我在我的站点中使用会话来判断用户是否登录。它工作了一段时间,然后我不得不重新安装我的服务器,它就停止工作了。作为参考,这是我使用的问题,其中有很多可能的解决方案:
Session variables not working php
这是我到目前为止尝试过的方法
- 在 header 重定向后放置
exit;
- 重定向到同一个域,我也尝试将整个 url 放在重定向中,但没有成功。此外,如果您只是输入文件名,它应该会自动执行此操作(根据我的经验)
- 在
php.ini
中将 session.save_path
设置为 "/var/lib/php/session"
- 确保脚本所有者 (
root
) 的完全 read/write 访问权限,同时确保 root 是所有者
ls -ld /var/lib/php/session
returns
drwxrwxrwx. 2 root apache 4096 Apr 9 16:55 /var/lib/php/session
- 将
session.cookie_lifetime
设置为 3600
,应该没有必要,但我可以试试
- 再次将
session.cookie_domain
更改为我的域,这不是必需的,因为默认情况下它会正确执行此操作
到目前为止,None 对我有用。我希望我忽略了一些简单的事情。
如您所见,$_SESSION
在 session2.php
中完全是空的。
顺便说一句,我在对 php.ini
进行更改后重新启动了 apache :)
session1.php
session_start();
$_SESSION['user'] = 'Test';
header('location: session2.php');
exit;
?>
session2.php
用会话定义变量 $_SESSION['user']
session_start();
print_r($_SESSION['user']);
?>
好的,我知道了!谢谢大家的建议,原来我需要学习阅读错误日志...
我使用 vestacp,显然它将 PHP 会话默认为 /home/admin/tmp
,我不确定如何更改,但您无法更改它(我做了)。但是还有另一个问题,该文件夹的所有权和权限不正确。结果我只需要一个 chmod -R 700 /home/admin/tmp
和 chown -R root /home/admin/tmp
- 我已经在另一个文件夹上试过了,但它不允许这样做。
顺便说一句,这里是触发“哦,我怎么不能更改会话目录”的错误行:
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
这里有很多关于 PHP 会话的问题,但是 none 的解决方案似乎对我有用。我制作了一个测试脚本来展示这个问题:
session1.php
session_start();
$_SESSION['user'] = 'Test';
header('location: session2.php');
exit;
?>
session2.php
session_start();
print_r($_SESSION);
?>
这是一个非常简单的示例,但是我在我的站点中使用会话来判断用户是否登录。它工作了一段时间,然后我不得不重新安装我的服务器,它就停止工作了。作为参考,这是我使用的问题,其中有很多可能的解决方案: Session variables not working php
这是我到目前为止尝试过的方法
- 在 header 重定向后放置
exit;
- 重定向到同一个域,我也尝试将整个 url 放在重定向中,但没有成功。此外,如果您只是输入文件名,它应该会自动执行此操作(根据我的经验)
- 在
php.ini
中将 - 确保脚本所有者 (
root
) 的完全 read/write 访问权限,同时确保 root 是所有者ls -ld /var/lib/php/session
returns
session.save_path
设置为 "/var/lib/php/session"
drwxrwxrwx. 2 root apache 4096 Apr 9 16:55 /var/lib/php/session
- 将
session.cookie_lifetime
设置为3600
,应该没有必要,但我可以试试 - 再次将
session.cookie_domain
更改为我的域,这不是必需的,因为默认情况下它会正确执行此操作
None 对我有用。我希望我忽略了一些简单的事情。
如您所见,$_SESSION
在 session2.php
中完全是空的。
顺便说一句,我在对 php.ini
进行更改后重新启动了 apache :)
session1.php
session_start();
$_SESSION['user'] = 'Test';
header('location: session2.php');
exit;
?>
session2.php
用会话定义变量 $_SESSION['user']
session_start();
print_r($_SESSION['user']);
?>
好的,我知道了!谢谢大家的建议,原来我需要学习阅读错误日志...
我使用 vestacp,显然它将 PHP 会话默认为 /home/admin/tmp
,我不确定如何更改,但您无法更改它(我做了)。但是还有另一个问题,该文件夹的所有权和权限不正确。结果我只需要一个 chmod -R 700 /home/admin/tmp
和 chown -R root /home/admin/tmp
- 我已经在另一个文件夹上试过了,但它不允许这样做。
顺便说一句,这里是触发“哦,我怎么不能更改会话目录”的错误行:
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