Php 警告:会话_destroy():尝试销毁未初始化的会话
我的class.inc文件:Php 警告:会话_destroy():尝试销毁未初始化的会话,php,session,Php,Session,我的class.inc文件: <?php class logout{ public function logout(){ $_SESSION = array(); if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000
<?php
class logout{
public function logout(){
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params["httponly"]);
}
session_destroy();
}
}
?>
当调用注销
功能时,它会销毁会话,但会显示警告:
Warning: session_destroy(): Trying to destroy uninitialized session in class.inc on line 9
我无法排除故障,因为在class.inc的session\u destroy()
启动您的会话
会话_start()代码>并且您可以销毁会话
<?php
session_start();
class logout{
public function logout(){
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params["httponly"]);
}
session_destroy();
}
}
?>
如果您事先没有启动会话,则此错误很常见
if (!isset($_SESSION))
{
session_start();
}
您必须在logout类中的logout函数顶部调用下面提到的函数
session_start();
添加上面的函数并试用。如果您没有在文件顶部启动会话,它将抛出异常,如“头已发送”、“无法启动会话”等。在调用会话之前,您必须调用会话启动()
您是否将会话存储在文件或数据库中的数据中。如果您将其存储在数据库中,我通常只从会话表中删除与会话id对应的记录,这样您就不必注销每个会话变量,它实际上会删除整个会话 当我开始使用session\u write\u close()
时,遇到了session\u destroy()
错误消息。要确定是否应调用会话\u destroy()
,我必须执行以下操作:
class Session {
public static function start() {
self::$haveSession = true;
session_start();
}
public static function finish() {
session_write_close();
self::$haveSession = false;
}
public static function clear() {
if (self::$haveSession) {
session_unset();
session_destroy();
}
}
}
在PHP>=5.4中,可以用if(session\u status()===PHP\u session\u ACTIVE)
替换if(self:$haveSession)
,如果之前没有启动会话,可以添加此代码来启动会话
if(!session_id()) {
session_start();
}
您在哪里启动会话?当没有启动任何会话时,会出现此错误警告。我在之后的每个页面顶部启动会话,也在您的注销页面?@TobiasKun我的注销仅在同一页面上。它位于每个页面中包含的head.inc文件中。从@session_destroy()中删除@
代码>它将显示警告。这不是正确的人。它显示了另一个通知通知:一个会话已经启动-忽略class.inc第2行的session_start(),因为该文件包含在session_start()之后的每个文件中代码>。所以两个session_start()代码>将显示一个通知。虽然我在会话已启动的页面中包含类文件。。。我必须在使用会话的每个类中使用session\u start()
。否则它会抛出错误。@Jonathan如果(!session_id())session_start(),您可以尝试代码>
if(!session_id()) {
session_start();
}
if (session_status() === PHP_SESSION_ACTIVE)
session_destroy();