当我通过销毁会话退出并启动另一个会话时,它总是向我显示我开始的第一个会话信息$ _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{
}
}
?>
index.php:
<?php session_start();?>
<h3><?php echo $_SESSION['username']; ?></h3>
答案 0 :(得分:4)
来自docs:
为了完全杀死会话,喜欢将用户注销掉, 会话ID也必须取消设置。如果使用cookie来传播 会话ID(默认行为),然后会话cookie必须是 删除。 setcookie()可以用于此。
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
答案 1 :(得分:0)
我同意 @Valery Viktorovsky 但是,
自PHP 7
以来,您在销毁会话后无法使用session_regenerate_id(true);
...
更改日志HERE说:
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');
所以你可以试试这个,如果你不想
答案 2 :(得分:0)
这是我的例子:
//Delete all previous PHPSESSID cookies
$past = 60 * 60 * 24 * 365 * 10;
setcookie('PHPSESSID', false, time() - $past);
//Delete all the data in the $_SESSION
$_SESSION = array();
//Delete the old session file (true) and create a new session id
session_regenerate_id(true);