Intereting Posts
captcha работает отлично в localhost, но не на моем хостинге Проблема с установкой драйвера PHP для MongoDb на wamp .htaccess Параметр PHP 5.3 нарушает параметр Access-Control-Allow-Origin? String with Convert.ToChar (0) hash результат отличается от chr (0) в PHP при хэшировании hash_hmac Импорт Magento из базы данных с использованием SQL-запроса Изменение родительской переменной из дочернего класса Журнальный журнал запросов Laravel Eloquent Как включить автозаполнение / синтаксис для основных функций PHP в Eclipse? LDAP Filter – Найти всех пользователей определенного подразделения Крючок AJAX в WordPress Ошибка PHPExcel в CodeIgniter «Не удалось загрузить запрошенный класс: iofactory» Сертификат peer не может быть аутентифицирован с помощью известных сертификатов CA с использованием расширения PHP OAuth Как преобразовать дату ISO8601 в другой формат в PHP? Сортировка запроса MySQL по широте / долготе Удаление текста после строки

Я просто не могу уничтожить сеанс в php

Когда я выхожу из системы, уничтожая сеанс и запуская другой, он всегда показывает мне первую информацию о сеансе, с которой я начал $ _SESSION ['username'];

Я имею в виду вот что: я начал сеанс при первом входе в систему с этим именем пользователя -> AAAAAA И уничтожил сеанс, используя файл logout.php, который содержит этот код:

session_start(); session_destroy(); header("location: login.php"); 

и логин с другим именем пользователя —> BBBBBB, и он всегда показывает мне первое имя пользователя, с которым я вошел в систему — — AAAAAA

Где проблема здесь

Вот код (login.php)

 <?php session_start(); require_once "config/db.php"; if(isset($_POST['login'])){ $username = trim(mysql_real_escape_string($_POST['username'])); $password = trim(mysql_real_escape_string(md5($_POST['password']))); $query = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password' ") or die(mysql_error()); $rows = mysql_num_rows($query); if($rows == 1){ while($info = mysql_fetch_object($query)){ $dbusername = $info->username; $dbpassword = $info->password; } if($dbusername == $username && $dbpassword == $password){ header("Location: index.php"); $_SESSION['username'] = $username; } }else{ } } ?> в <?php session_start(); require_once "config/db.php"; if(isset($_POST['login'])){ $username = trim(mysql_real_escape_string($_POST['username'])); $password = trim(mysql_real_escape_string(md5($_POST['password']))); $query = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password' ") or die(mysql_error()); $rows = mysql_num_rows($query); if($rows == 1){ while($info = mysql_fetch_object($query)){ $dbusername = $info->username; $dbpassword = $info->password; } if($dbusername == $username && $dbpassword == $password){ header("Location: index.php"); $_SESSION['username'] = $username; } }else{ } } ?> 

index.php:

  <?php session_start();?> <h3><?php echo $_SESSION['username']; ?></h3> 

Из документов :

Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться setcookie ().

Пример :

 session_unset(); session_destroy(); session_write_close(); setcookie(session_name(),'',0,'/'); session_regenerate_id(true); 

Я согласен с @Valery Viktorovsky, но с PHP 7 вы не можете использовать session_regenerate_id(true); после уничтожения сеанса …

Черепаха ЗДЕСЬ Говорит:

 7.0.0 - session_regenerate_id() saves old session data before closing. 

Это работает на PHP 7 или новее:

 ob_start(); session_start(); session_unset(); session_regenerate_id(true); session_unset(); session_destroy(); session_write_close(); setcookie(session_name(),'',0,'/'); header('LOCATION: index.php'); 

так что вы можете попробовать это, если не хотите