PHP, запретить пользователям доступ к странице, пока они не вошли в систему?

3

Как я могу запретить пользователю получать доступ к странице, когда они не вошли в систему? Я хочу, чтобы он был перенаправлен на страницу входа. Я знаю, что это имеет какое-то отношение к сеансам.

  • 0
    Как узнать, активны пользователи или нет? Какие переменные устанавливаются?
  • 0
    Еще один совет, если вы еще не реализовали: после проверки, существует ли пользовательский сеанс или нет, проверьте, исходила ли переменная POST от запроса, а не от прямого доступа. Цель состоит в том, чтобы предотвратить публичный прямой доступ к вашей странице PHP (если они каким-то образом увидели ее) и нежелательные функции были выполнены.
Теги:
authentication

4 ответа

7
Лучший ответ

Он работает следующим образом:

  • Запустить сеанс: session_start()
  • Если Session [ "user" ] == null, перенаправление на страницу входа в систему, продолжайте.
  • На странице входа в систему попросите пароль пользователя с помощью формы
  • Отправить эту форму на странице входа в систему
  • Проверяйте свою проверку подлинности (например, таблицу в mysql), если пользователь авторизован
  • Если да, Session [ "user" ] = $userName, перенаправите пользователя на страницу. Если нет, запросите пароль еще раз.

Конечно, все это очень, очень просто. В вашей сессии вы можете сохранить сложный пользовательский объект или что угодно. Кодирование удачи.

  • 1
    Как насчет того, если вы хотите сделать это для любого пользователя по определенному URL? Если они вошли в систему или нет.
8

Как отметил Светлозар Ангелов, следующий код будет хорошо работать:

if (!isset($_SESSION['nID']))
    header("Location: login.php");

Однако.. это фактически не защитит страницу от пользователей, которым действительно нужен доступ. Вам нужно внести некоторые изменения:

if (!isset($_SESSION['nID']))
{
    header("Location: login.php");
    die();
}

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

Также следует отметить, что $_SESSION ['nID'] может быть заменен для любой другой переменной, которую вы используете для хранения имен пользователей или идентификаторов.

8

Когда он регистрирует - сохраняет переменную сеанса. Затем в начале каждой страницы

session_start();
if (!isset($_SESSION['nID']))
    header("Location: login.php");

Если логин в порядке

session_start();
$_SESSION['nID'] = 1; //example
  • 0
    Не работает; опытные пользователи могут игнорировать перенаправление.
1

Выполните следующие действия:

Создайте страницу login.php, доступную всем, где пользователь вводит свое имя пользователя и пароль в форме. Эта форма должна быть отправлена ​​самому login.php. (Действие = 'login.php'). Также включите скрытую переменную в вашу форму, которая отслеживает, была ли отправлена ​​форма.

Если скрытая переменная установлена, проверьте, существует ли в вашей базе имя пользователя ($_POST['user']) и что пароль совпадает с именем пользователя. Если это так, сохраните имя пользователя в переменной $_SESSION следующим образом:

$_SESSION['username'] = $_POST['user'];

Если это не так, перезагрузите login.php следующим образом:

echo 'header("login.php")'; //You should not have echoed anything before this

Теперь включите login.php на каждой странице пользователя, которую вы создаете. Предположим, вы пишете приложение электронной почты, создайте inbox.php, как этот

include ("login.php")

Теперь login.php будет проверять, установлена ​​ли переменная сеанса 'user' и разрешить доступ только к авторизованным пользователям.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню