Предупреждение: session_destroy (): попытка уничтожить неинициализированную сессию

мой файл 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, $params['path'], $params['domain'], $params['secure'], $params["httponly"]); } session_destroy(); } } ?> 

используемый код для моего выхода:

 session_start(); require($path."include/class.inc"); if(!empty($_GET['logout'])){ $object=new logout(); $object->logout(); $content='5;url='.$path.'index.php'; } из session_start(); require($path."include/class.inc"); if(!empty($_GET['logout'])){ $object=new logout(); $object->logout(); $content='5;url='.$path.'index.php'; } из session_start(); require($path."include/class.inc"); if(!empty($_GET['logout'])){ $object=new logout(); $object->logout(); $content='5;url='.$path.'index.php'; } 

Когда вызывается функция logout , она уничтожает сеанс, но показывает предупреждение:

 Warning: session_destroy(): Trying to destroy uninitialized session in class.inc on line 9 

Я не могу устранить неполадки, так как сеанс не уничтожается никакими другими средствами до session_destroy() класса class.inc .

Related of "Предупреждение: session_destroy (): попытка уничтожить неинициализированную сессию"

Вы должны вызвать функцию, указанную ниже, в верхней части функции выхода в класс выхода.

 session_start(); 

Добавьте вышеприведенную функцию и попробуйте ее. Если вы не запустите сеанс в верхней части файла, он будет генерировать исключения, такие как «уже отправленные заголовки», «невозможно запустить сеанс» и т. Д.

Эта ошибка распространена, если вы не запустили сеанс заранее

 if (!isset($_SESSION)) { session_start(); } 

Я столкнулся с сообщением об ошибке session_destroy() когда начал использовать session_write_close() . Чтобы определить, нужно ли вызывать session_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 (self::$haveSession) на if(session_status() === PHP_SESSION_ACTIVE) .

Запустите сеанс session_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(); } } ?> 

Вы должны будете вызвать session_start () перед вызовом session_destroy ();

Вы храните сеанс в данных в файлах или в базе данных. Если вы храните его в базе данных, я обычно просто удаляю запись из таблицы сеансов, которая соответствует идентификатору сеанса, так что вам не нужно отменить регистрацию каждого сеанса var и фактически удаляет весь сеанс.