簡體   English   中英

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

那么這是stats.php:

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

而這是我的html 5文檔。

但是,即時消息是否登錄並不重要,它仍然允許我訪問stats.php

您沒有存儲任何會話值,因此如果條件始終失敗。

所以加

$_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。現在我的密碼是錯誤的,但我使用用戶名進行了sesion。 ????

如果知道統計信息的網址,我可以通過http網址訪問,然后查看不是我的信息。

您的登錄結構有一個大錯誤。

您需要在檢查密碼中插入set session var。 在標頭之前... stats.php並刪除其他發生在login.php文檔上的文件。

您可以在logout.php : sesion_Destroy()上注銷logout.php : sesion_Destroy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM