在PHP中销毁会话时出错

Var*_*run 7 php session

我在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

pic*_*cus 0

您如何存储会话?如果它是基于文件的,可能是超时或权限错误?

另外,我想知道 regenerate_id 是否导致 destroy 函数寻找技术上不再存在的会话。您是否尝试过在重新生成函数中将该布尔参数设置为 false ?

我们在 CakePHP 应用程序上遇到了这个问题,但我们通过调整 Cake 设置来纠正它。