1

我有一个这个登录脚本:

<?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');
}
?>

那么这是stats.php:

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

下面是我的 html 5 文档。

但是我是否登录都没有关系,它仍然允许我访问 stats.php

4

3 回答 3

1

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

所以添加

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

里面login.php.

于 2013-09-12T06:51:37.067 回答
0

您还没有设置会话。这就是你被重定向的原因。

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
于 2013-09-12T06:49:35.240 回答
0

你总是设置用户名 session var 。想象一下这种情况:

我想获取用户统计信息,我只需要使用用户测试登录并使用其他用户名重试。如果我在没有正确密码的情况下将用户名写入成功,则查询结果将获得 num_Rows > 0,因为用户名是正确的。

下一步你要测试密码,但是在生成哈希和测试哈希之间你初始化了会话。现在我的密码错误,但我用用户名得到了初始化会话。???

如果知道统计信息的 url,我可以通过 http url 访问并查看不是我的信息。

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

您需要在检查密码中插入设置会话变量。在标头之前 ...stats.php 并删除其他在 login.php 文档中发生的内容。

你可以让它注销logout.php : sesion_Destroy()

于 2016-01-27T23:54:50.743 回答