php - 在 PHP 中销毁 session 时出错

标签 php session

我在 PHP(版本 5.2.10)中处理 session 时遇到问题。我正在使用下面提到的功能进行登录、注销和验证 session 。

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() 函数。如果 session 无效,它将重定向到登录页面。 login() 函数用于为用户创建 session 。 当用户点击注销时,会调用logout()函数来销毁 session 。

问题是:logout() 函数随机抛出警告:
警告:session_destroy(): session 对象销毁失败

我很少收到此警告。就像在 20-30 次注销调用中,我得到了一次。有什么想法吗?

我在 windows xp 机器上开发。

更新: session 存储在文件系统中。
路径:C:\WINDOWS\Temp

最佳答案

是否在 validate_session() 之外的其他地方调用了 logout() ?如果不是,问题可能是在 logout() 之前调用 session_destroy()

你可以试试这个:

validate_session()
{
    session_set_cookie_params(0);
    session_start();
    if ( !isset( $_SESSION['user_id'] ) ) {
        logout();
        header("Location: login_page");
    }
}

logout()
{
    $_SESSION = array();
    setcookie(session_name(), '', time() - 3600, '/');
    session_destroy();
}

关于php - 在 PHP 中销毁 session 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548821/

相关文章:

php - 如何检查一个字符是字母还是数字?

php - Laravel 子域 : single auth across all subs not working?

node.js - 在passport js反序列化中,将 session 数据存储在浏览器cookie中

php - Adobe 是否提供用于将 HTML 转换为 PDF 的服务器端库?

java - https 和 http 之间的 session 没有得到维护

php - session 在 codeigniter 中不起作用

ASP.Net session

PHP:在一个表和另一个表中搜索

javascript - 使用 AngularJs 和 PHP 显示从 MYSQL 收集的数据到 html 页面

php - 循环内的 SQL 查询