--EDIT--
发现了这个问题 . 感谢Conyc . 我想我发现了这个问题 . 当没有剩余的行要读取时,mysqli_fetch_assoc($ result)返回null . 这意味着当您尝试将用户名放入$ _SESSION ['Id'] = $ row ['Username']的会话时,$ row将为null;尝试将用户名存储在变量中,就像使用密码一样 . - Conyc 12分钟前
目前正在尝试通过登录来显示内容 . 我正在使用会话和哈希密码 . 我不能为我的生活弄清楚为什么它没有显示我“登录” . if(isset($ _ SESSION ['Id']))显示我没有登录,即使我可以从mysql中检索我的用户名和密码 . 我认为它可能与html上的会话有关?或者会话ID可能错了? IDK . 如果你们有任何想法,我很想知道 . 我是一个新的PHP,所以它非常粗糙 .
这是我的login.php
<?php
session_start();
$servername = "localhost";
$username = "root";
$password = "";
$user = $_POST['User'];
$Userpassword = $_POST['Password'];
$password_hash = password_hash($Userpassword, PASSWORD_DEFAULT);
$storedPassword = "";
// Create connection
$conn= mysqli_connect("$servername","$username","$password") or die ("could
not connect to mysql");
mysqli_select_db($conn, "dpw_recyclopedia") or die ("no database");
$sql = "SELECT Username, Password FROM Users WHERE Username = '".$user."'";
$result = mysqli_query($conn, $sql);
if(! $result ) {
die('Could not select data: ' . mysqli_error($conn));
}
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
//echo "user: " . $row["UserName"]. " " . $row["Password"]. "<br>";
$storedPassword = $row["Password"];
}
} else {
echo "User Not Found";
}
if (password_verify($Userpassword , $storedPassword)) {
$_SESSION['Id'] = $row['Username'];
header ("Location: 'mywebsite');
}else {
header ("Location: 'mywebsite');
exit();
}
?>
这是我的html页面
<?php
include 'DbConfig.php';
session_name('Id');
session_start();
session_regenerate_id();
?>
<!DOCTYPE html>
<html lang="en">
<?php
if (isset($_SESSION['Id'])){
echo "you are logged in";
} else {
echo "you are not logged in";
}
echo json_encode($_SESSION);
echo json_encode($_COOKIE);
?>
<form method = 'POST' action="./ajax/login.php">
<input type='text' name='User' placeholder='Email'>
<input type='password' name= 'Password'
placeholder='Password'>
<button type='submit' name='my_form_submit_button'>
<span class='glyphicon glyphicon-log-in'></span>
Sign In
</button>
</form>
<form method = 'POST' action="./ajax/logout.php">
<button type='submit' name='my_form_submit_button'>
<span class='glyphicon glyphicon-log-in'></span>
Sign Out
</button>
</form>
</html>
2 回答
您实际上在两个页面上使用不同的会话 .
在您的html页面中,您可以使用将会话名称设置为“Id”
您的login.php页面使用默认会话名称,因为没有其他声明 .
通过声明相同的会话名称或使用默认值,确保需要共享同一会话的所有页面上的会话名称相同 .
您还可以使用自己在html页面的每个页面加载中进行新的会话
你也必须删除它 .
此外,在将其添加到会话之前,必须将数据库中的用户名存储在临时变量中,因为
$row
将在您尝试将其添加到会话时null
(mysqli_fetch_assoc()
在没有更多行要提取时返回null
) .试试这段代码(改变if(password_verify)部分):