我有一个登录系统,当用户登录时,他们将被发送到名为user.php
的新文件中。在登录文件中,我有以下代码:
$user = $check->fetch_assoc();
if (password_verify($_POST['password'], $user['password'])) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $user['username'];
header('location: user.php');
}
,当用户成功登录后,他将被发送到user.php
文件,该文件中的代码如下:
<?php
// Start The session
session_start();
// Chaeck if the user is logged in.
if ($_SESSION['logged_in'] = false) {
$_SESSION['message'] = 'You must Login to continue use this section.';
header('location: error.php');
} else {
$username = $_SESSION['username'];
echo $username;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
</head>
<body>
<h1>
Welcome, <?php echo $username?>,
</h1>
</body>
</html>
但是,当用户登录时,他获得了未定义的索引:用户名。我想知道为什么要使用Sessions。
答案 0 :(得分:1)
请下次尝试发送完整的代码,以帮助您变得更加容易。用户名未定义,可能是因为您没有在身份验证脚本(例如首先处理该会话的login.php)中初始化会话session_start();
。同样,您将需要通过为每个登录用户 session_regenerate_id();
$user = $check->fetch_assoc();
if (password_verify($_POST['password'], $user['password'])) {
// initialize session
session_start();
// prevent session fixation attack
session_regenerate_id();
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $user['username'];
header('location: user.php');
}
可选
在user.php上 取消执行会话检查的方式,并替换下面的代码。 您可以检查用户会话是否使用此简单脚本设置
<?php
// initialize session if session has not be initialize otherwise remove it
session_start();
if(!isset($_SESSION['username']) || (trim($_SESSION['username']) == '')) {
echo "you must login";
exit();
}else{
// login flows
}
?>
如果无法解决您的问题,请发送完整的代码
答案 1 :(得分:1)
var=$(myscript.elf 2>&1 | tr -d '\r')
此处已修改欢迎页面
$user = $check->fetch_assoc();
if(!empty($user)) {
$passwordCheck = password_verify($_POST['password'], $user['password'])
if ($passwordCheck) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $user['username'];
header('location: user.php');
}
}