мой файл 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
.
Вы должны вызвать функцию, указанную ниже, в верхней части функции выхода в класс выхода.
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 и фактически удаляет весь сеанс.