我在PHP(版本5.2.10)的会话处理中遇到问题.我使用下面提到的函数进行登录,注销和验证会话.
login()
{
session_set_cookie_params(0);
session_start();
session_regenerate_id(true);
$_SESSION['user_id']
}
validate_session()
{
session_set_cookie_params(0);
session_start();
if (isset($_SESSION['user_id']) === FALSE) {
session_destroy();
logout();
header("Location: login_page");
}
}
logout()
{
session_set_cookie_params(0);
session_start();
$_SESSION = array();
setcookie(session_name(), '', time() - 3600, '/');
session_destroy();
}
每个页面首先调用validate_session()函数.如果会话无效,则会重定向到登录页面.login()函数用于为用户创建会话.当用户单击logout时,将调用logout()函数来销毁会话.
问题是:logout()函数随机抛出警告:
警告:session_destroy():会话对象销毁失败
我很少收到这个警告.就像20-30次退出呼叫一样,我得到了一次.有什么想法吗?
我正在开发一台Windows XP机器.
更新:会话存储在文件系统中.
路径:C:\ WINDOWS\Temp
您如何存储会话?如果它是基于文件的,可能是超时或权限错误?
另外,我想知道 regenerate_id 是否导致 destroy 函数寻找技术上不再存在的会话。您是否尝试过在重新生成函数中将该布尔参数设置为 false ?
我们在 CakePHP 应用程序上遇到了这个问题,但我们通过调整 Cake 设置来纠正它。