php会话登录问题

时间:2013-09-12 06:47:53

标签: php html sql

我有一个登录脚本:

<?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

3 个答案:

答案 0 :(得分:1)

您没有存储任何会话值,因此如果条件总是失败。

添加

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

login.php.

答案 1 :(得分: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

答案 2 :(得分:0)

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

我想获得用户统计信息,我只需要与用户进行测试登录,然后使用其他用户名重试。  如果我写了一次没有正确密码的用户名成功,查询结果得到一个num_Rows&gt; 0,因为用户名是好的。

下一步你将测试密码,但是在生成hash和test hash之间你初始化sesion.Now我的密码是错误的但是我得到了用户名的init sesion。 ????

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

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

您需要在check check中插入set session var。在标题之前... stats.php并删除其他在login.php文档上发生的内容。

您可以在logout.php : sesion_Destroy()

上注销