Когда я выхожу из системы, уничтожая сеанс и запуская другой, он всегда показывает мне первую информацию о сеансе, с которой я начал $ _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');
так что вы можете попробовать это, если не хотите