PHP 会话登录问题


php session login issue

我有一个这个登录脚本:

<?php
session_start();

$username = $_POST['username'];
$password = $_POST['password'];
include 'includes/connect.php';
$username = mysqli_real_escape_string($con, $username);
$query = "SELECT password, salt
    FROM member
    WHERE username = '$username';";
$result = mysqli_query($con, $query);
if(mysqli_num_rows($result) == 0) 
{
header('Location: login.html');
}
$userData = mysqli_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
$_SESSION['username']=$username; 
if($hash != $userData['password']) 
{
header('Location: login.html');
}else{ // Redirect to home page after successful login.
 $_SESSION['username']=$username; 
header('Location: stats.php');
}
?>

那么这是统计数据.php:

 <?php 
 session_start();
 if(!isset($_SESSION['username'])){
 header("Location:register.html");
 }
 ?>

下面是我的HTML 5文档。

但是,我

是否登录并不重要,它仍然允许我访问统计信息.php

您没有存储任何会话值,因此 if 条件将始终失败。

所以添加

$_SESSION['username'] = $userData['username'];

内部login.php.

您尚未设置会话。这就是您被重定向的原因。

像这样在login.php代码上设置会话

$userData = mysqli_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
//Set here like this
$_SESSION['username']=$username; // or whatever you have

您始终设置用户名 sesion var .想象一下这种情况:

我想获取用户统计信息,我只需要使用用户测试登录并使用其他用户名重试。 如果我一次写成功的用户名没有正确的密码,查询的结果得到一个num_Rows>0,因为用户名还可以。

下一步您将测试

密码,但在生成哈希和测试哈希之间,您将初始化 sesion。现在我的密码是错误的,但我得到了用户名的初始化。????

如果知道统计数据的 URL,我可以通过 HTTP URL 访问并查看不属于我的信息。

您的登录结构有一个大错误。

您需要在检查密码中插入设置的会话变量。 在标题之前... stats.php和删除其他发生在登录.php文档。

您可以这样做以注销logout.php : sesion_Destroy()