[英]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.