В попытке защитить администраторскую область сайта, над которым я работаю, я сделал index.php, который содержит
if (isset($_POST['password']) && isset($_POST['userName'])) { if($_POST['password']==$pass && $_POST['userName']==$username) { header( 'Location: admin.php' ) ; }
Это перенаправляет файл в ту же папку, что и admin.php. Проблема в том, что я могу получить доступ к этому файлу, если я пишу localhost/folder/admin.php
. Скажите, пожалуйста, как ограничить прямой доступ к этой странице. Единственный способ получить его – от index.php после имени пользователя и пароля.
установить переменную сеанса и проверять ее каждый раз, когда кто-то получает доступ к admin.php
<?php if (isset($_POST['password']) && isset($_POST['userName'])) { if ($_POST['password'] == $pass && $_POST['userName'] == $username) { if (!session_id()) session_start(); $_SESSION['logon'] = true; header('Location: admin.php'); die(); } ?>
а также
//admin.php if (!session_id()) session_start(); if (!$_SESSION['logon']){ header("Location:index.php"); die(); }
Вы должны изучить PHP-сессии. Вы можете установить переменную сеанса «isLogged» в этом файле перенаправления, а затем проверить в admin.php, если эта переменная сессии зарегистрирована, если не перенаправляется на страницу входа!
session_start(); if (isset($_POST['password']) && isset($_POST['userName'])) { if($_POST['password']==$pass && $_POST['userName']==$username) { header( 'Location: admin.php' ) ; $_SESSION['isLogged'] = true; }
admin.php
session_start(); if(!$_SESSION['isLogged']) { header("location:login.php"); die(); }
Примечание: session_start (); должен быть вызван до того, как глобальный $ _SESSION может быть использован.
Задайте значение сеанса, которое означает, что пользователь успешно выполнил вход в систему, проверьте его на каждой странице, которую вы хотите защитить, переадресовываете на логин, если это значение не задано.