Ограничить прямой доступ к странице

В попытке защитить область администратора сайта, над которым я работаю, я сделал 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 после имени пользователя и пароля.


person George    schedule 28.07.2011    source источник


Ответы (3)


установите переменную сеанса и проверяйте ее каждый раз, когда кто-то обращается к 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();
}
person genesis    schedule 28.07.2011

Вы должны изучить сеансы 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.

person Brad Morris    schedule 28.07.2011

Установите значение сеанса, которое означает, что пользователь успешно вошел в систему, проверьте его на каждой странице, которую вы хотите защитить, перенаправьте на вход, если это значение не установлено.

person deceze♦    schedule 28.07.2011