我在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()函数随机抛出警告:
Warning: session_destroy(): Session object destruction failed
我很少收到这个警告 . 就像20-30次退出呼叫一样,我得到了一次 . 有什么想法吗?
我正在开发一台Windows XP机器 .
更新:会话存储在文件系统中 .
路径:C:\ WINDOWS \ Temp
3 回答
是否在validate_session()中调用logout()?如果没有,问题可能是在logout()之前调用session_destroy()
你可以试试这个:
找到something,这可能对此主题有用 . 基本问题是:
会话是否有效开始 -
session_start()
的返回值是多少?会话文件是否存在于PHP.ini
session.save_path
中,可以删除 .我怀疑你的情况是第一个 . 我不记得在哪里,但我想我已经看到会话无效的情况,然后由于某种原因尝试重复该过程 .
你是如何存储会话的?如果是基于文件,可能是超时或权限错误?
另外,我想知道regenerate_id是否导致destroy函数寻找技术上不再存在的会话 . 您是否尝试在重新生成函数中将该布尔参数设置为false?
我们在CakePHP应用程序上遇到了这个问题,但我们通过使用Cake设置进行了几次修改来纠正它 .