我在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 设置来纠正它。