Intereting Posts
нужно регулярное выражение для анализа файла csv с двойными кавычками в php Загружать несколько изображений с помощью php и sql PHP Переадресация на другую страницу после отправки формы NetBeans не удалось установить некоторые модули Как защитить трафик между iOS-приложением и сервером? Как преобразовать огромное целое число в hex в php? Не удалось найти перенос сокетов «ssl» – вы забыли включить его при настройке PHP? Правильный график Facebook Api Video Insitghts Request PHP SDK Элементы анализа из href-тегов PHP – действие формы, вызывающее себя, как отображать все на одной странице? Копирование PHP-кода из учебника дает уведомления на моем компьютере mysqli_fetch_assoc () ожидает, что параметр 1 будет mysqli_result, boolean given Загрузка дополнительных сообщений Ajax Button в WordPress Каковы веские причины использования статических методов в PHP? php show alert перед тем, как вызывать код

Ошибка – session_destroy () – попытка уничтожить неинициализированную сессию

Я получаю сообщение об ошибке, используя session_destroy () в моем PHP-коде.

Следующий скрипт находится на каждой странице, и если пользователь зарегистрирован, он проверяет, является ли сеанс действительным или нет, убивая сессию, если это не так.

session_start(); // check for users already signed in and check session if (isset($_SESSION['user_id'])) { $uid = $_SESSION['user_id']; // check user_id is a valid id if (!is_numeric($uid) || $uid < 0) { session_unset(); session_destroy(); session_regenerate_id(true); } // if user agent is different, kill session if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']) { session_unset(); session_destroy(); session_regenerate_id(true); } // if user's last login record fails to match session_id, kill session $SQL = "SELECT user_session FROM users_logins "; $SQL .= "WHERE user_id = :user_id "; $SQL .= "ORDER BY time_in DESC LIMIT 1;"; $STH = $DBH_P->prepare($SQL); $STH->bindParam(':user_id', $uid); $STH->execute(); $row = $STH->fetch(); if ($STH->rowCount() > 0) { $db_sid = $row['user_session']; } if ($db_sid !== session_id()) { session_unset(); session_destroy(); session_regenerate_id(true); } } 

Ошибка, которую я получаю, указывает, что сбой происходит из последнего вызова session_destroy() .

Я использую session_destroy() правильно или нет? Я читал другие вопросы здесь, но большинство ответов советуют использовать session_start() перед уничтожением, но я начал сеанс вверху, прежде чем начнется чек.

Вы делаете некоторые сумасшедшие вещи там (но вам нужно договориться об этом с вашим собственным, я не расскажу об этом в своем ответе), причина, по которой вы видите сообщение об ошибке, довольно проста:

  session_regenerate_id(true); 

командует PHP для уничтожения старого сеанса. Проблема в том, что вы уже это сделали, одна строка раньше:

  session_destroy(); session_regenerate_id(true); 

Так что просто взгляните сверху. В OCD нет причин бросать столько функций, сколько вы сочтете нужным (но на самом деле не понимаете / хорошо знаете) на обработку сеанса. Вместо этого возьмите одну функцию, предназначенную для выполнения задания, и на самом деле обработайте ее возвращаемое значение, если вы хотите на самом деле разместить там некоторую защитную сетку. Это было бы более полезно.

Перед началом другого сеанса вам нужно уничтожить предыдущую сессию. Таким образом, а также «вход в систему» ​​создает сеанс, также должен быть метод «выхода из системы», который уничтожает сеанс. Убедитесь, что у вашего приложения есть оба.