У меня есть следующий сценарий входа.
<?php $name = $_POST["name"]; $password = $_POST["password"]; $query = "SELECT * FROM users WHERE username = '$name' AND password = '$password'"; $q=mysql_query($query) or die(mysql_error()); $result = mysql_query($query); if (mysql_fetch_row($result)) { /* access granted */ session_start(); header("Cache-control: private"); $_SESSION["access"] = "granted"; header("Location: ./menu.php"); } else /* access denied – redirect back to login */ header("Location: ./login.html"); ?> mysql_close(); ?>
Но что мне теперь нужно, чтобы «меню» перенаправляло пользователей, которые не вошли на страницу входа? для предотвращения прямого доступа?
Благодарю.
в menu.php?
session_start(); if (!isset($_SESSION['access']) || $_SESSION['access'] != "granted") { header("Location: ./login.html"); exit(); }
Вы должны положить что-то вроде этого в верхней части menu.php:
<?php session_start(); if(!isset($_SESSION['access']) || $_SESSION['access'] != 'granted'){ header("Location: ./login.html'); } ?>
И не забывайте процедить ваш запрос:
$name = mysql_real_escape_string(stripslashes($_POST["name"])); $password = mysql_real_escape_string(stripslashes($_POST["password"]));
И не забудьте вызвать session_start();
в начале каждого скрипта, который использует $_SESSION
Проверьте значение $_SESSION["access"]
в верхней части вашего menu.php. Кроме того, вы пропустите вызов session_start
. Это может не понадобиться, если у вас включен session.auto_start, но это хорошая привычка явно его вызывать.
Проверьте $_SESSION["access"]
в меню, чтобы узнать, вошел ли пользователь в систему. Кстати, вы должны прочитать о SQL-инъекции и переписать этот SQL-запрос, используя escaping.