PHP会话系统崩溃
我创建了一个相对较小的基于php/mysql的网站,并将其托管在运行Red Hat 6.4、Apache/2.2.15的服务器上。为了访问该站点,需要用户进行身份验证 现在出现了一个奇怪的问题。当我启动服务器时,站点最初运行正常,但大约12-24小时后,php会话停止工作。当用户尝试登录时,他们的凭据将从数据库中成功检索,登录脚本将设置会话变量,但当他们重定向到主页时,会话变量将丢失,因此主页认为他们没有登录,并将他们重定向回登录页。该网站使用率不高,大约有50名注册用户,每天的登录人数不到100人。此外,该站点需要一个邀请代码才能注册,因此机器人进入该站点的可能性非常小 以下是用于启动会话、登录用户以及检查用户是否经过身份验证的PHP函数(代码的灵感来源于): 为了验证我的假设,即问题与会话有关,我创建了以下php页面,并在正常运行时间检查器上每5分钟对其进行一次监控:PHP会话系统崩溃,php,linux,apache,session,redhat,Php,Linux,Apache,Session,Redhat,我创建了一个相对较小的基于php/mysql的网站,并将其托管在运行Red Hat 6.4、Apache/2.2.15的服务器上。为了访问该站点,需要用户进行身份验证 现在出现了一个奇怪的问题。当我启动服务器时,站点最初运行正常,但大约12-24小时后,php会话停止工作。当用户尝试登录时,他们的凭据将从数据库中成功检索,登录脚本将设置会话变量,但当他们重定向到主页时,会话变量将丢失,因此主页认为他们没有登录,并将他们重定向回登录页。该网站使用率不高,大约有50名注册用户,每天的登录人数不到10
<?php
require_once("include/authentication.php");
SecSessionStart();
$_SESSION['sessionCheck'] = "The cookie was successfully saved and retrieved";
session_write_close();
$_SESSION['sessionCheck']="";
SecSessionStart();
if (isset($_SESSION['sessionCheck']))
{
echo($_SESSION['sessionCheck']);
}
session_destroy();
session_write_close();
?>
正如我所怀疑的,页面在大约20个小时内返回了正确的答案,然后我得到一个警告,页面没有显示成功字符串。我收到警报后,网站上的登录部分也不起作用。我曾尝试重新启动httpd进程以恢复会话,但这没有帮助。只有在服务器完全重启后,一切才恢复正常
我试着在某某和其他网站上搜索我的问题,我发现了一些有点关联的问题,但它们并不完全适合我的情况。我的问题与其他类似问题的主要区别在于,该站点一开始运行得非常好,但一段时间后,会话总是失败。其他的海报也有问题,他们有时会失去会议,或者会议根本不起作用
任何关于这个问题可能来源的提示都将不胜感激。如果您需要我提供任何有帮助的进一步信息,请告诉我
谢谢您的会话存储在哪里?在/etc/php5/apache2/php.ini中,
session.save_handler
和session.save_path
的值是什么?save_handler=文件;save_path=/var/lib/php/session我已经检查了这个路径,它有6204个文件,最早的是1月14日的文件。应该有这么多文件吗?应该没问题。也许只要看看这个目录,当问题再次出现时,检查一下设备上还有多少空间之类的东西。24小时后问题再次消失的事实可能指向某种清理机制,可能是logrotate,它释放了一些空间。
<?php
require_once("include/authentication.php");
SecSessionStart();
$_SESSION['sessionCheck'] = "The cookie was successfully saved and retrieved";
session_write_close();
$_SESSION['sessionCheck']="";
SecSessionStart();
if (isset($_SESSION['sessionCheck']))
{
echo($_SESSION['sessionCheck']);
}
session_destroy();
session_write_close();
?>