У меня есть этот сценарий входа:
<?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.Now мой пароль неправильный, но я получаю init sesion с именем пользователя. ????
если знаете URL-адрес для статистики, я могу получить доступ по http-адресу и посмотреть информацию, которая не принадлежит мне.
У вашей структуры для входа в систему появилась большая ошибка.
Вам нужно вставить установленный сеанс var внутри пароля проверки. перед заголовком … stats.php
и удалять остальные происходит в файле login.php.
вы можете сделать это для выхода на logout.php : sesion_Destroy()