Перенаправление на предыдущую страницу после входа в систему с помощью PHP

Предположим, я хочу перейти на страницу контактов. Но для того, чтобы попасть туда, сайт требует от меня входа в систему. После входа в систему я должен быть перенаправлен на страницу контактов, но я где-то еще. Что мне делать, чтобы мне пришлось перенаправить на страницу, которую я хочу после входа?

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

У вас есть три общих подхода:

  1. Храните предыдущую страницу в сеансе;
  2. Храните страницу как переменную GET; или
  3. Сделайте внутреннее перенаправление на страницу входа.

(1) выглядит примерно так:

<?php session_start(); if (!$_SESSION['userid']) { $_SESSION['page'] = '/contact'; header('Location: /login'); exit; } ... ?> 

При успешном входе в систему загрузите $_SESSION['page'] и перенаправьте.

(2) аналогичен, за исключением того, что нет переменной сеанса. Вместо этого у вас есть:

 header('Location: /login?return=/contact'); 

для передачи перенаправления. Страница входа в систему должна включать его как скрытое поле формы на странице, которое представляет пользователю запрос на имя пользователя и пароль.

(3) аналогичен, но не перенаправляется на отдельную страницу. Вместо этого каждая страница потенциально может быть страницей входа в систему. Если пользователь не зарегистрирован в форме входа в систему, вместо него. URL-адрес по-прежнему будет «/ contact». Каждая страница будет обнаруживать и обрабатывать попытки входа в систему.

Преимущество этого метода заключается в том, что он меньше внешнего перенаправления, и обрабатывать представленные формы проще. Под этим я подразумеваю, что представьте, что кто-то заполняет форму на одной из ваших страниц, а затем нажимает кнопку submit. Система видит, что их логин истекло. Если вы перенаправляете пользователя на новую страницу и затем перенаправляете обратно, им, вероятно, потребуется повторно ввести все поля формы. Если вы будете обрабатывать логин неявно, вы можете включить все поля формы в виде скрытых вводов и после того, как вы вошли в систему без проблем, рассматриваете его как отправку исходной страницы.

Подход, который я обычно использую:

  1. На странице контактов перейдите на страницу входа, если пользователь не вошел в систему.
  2. На странице входа в систему используйте переменную $_SERVER['HTTP_REFERER'] (которая будет установлена ​​на страницу, с которой пользователь пришел, т.е. на странице контактов), и сохраните это как скрытое поле.
  3. После того, как пользователь войдет в систему, перенаправьте их обратно на страницу, на которой они были.

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

Одно предупреждение: при входе в систему вы должны проверить, что страница в реферере находится на вашем сайте, а не совсем другой сайт, например, если пользователь пришел из Google.

Я имею тенденцию перенаправлять на страницу входа, передавая текущий URL-адрес в строке запроса.

Страница для защиты

 session_start(); if (!isset($_SESSION['user_id'])) { // Fetch current URL $this_url = $_SERVER['REQUEST_URI']; // Redirect to login page passing current URL header('Location: login.php?return_url=' . urlencode($this_url)); exit; } // Continue processing echo 'Hello from this page'; 

Страница входа

 session_start(); // Simulate logging in user $_SESSION['user_id'] = 1; // Fetch URL to redirect to $return_url = isset($_GET['return_url']) ? $_GET['return_url'] : 'site_home.php'; // Redirect back header('Location: ' . $return_url); 

В приведенном выше коде я просто имитирую процесс входа в систему. Обычно пользователь должен отправлять свои учетные данные через форму, учетные данные проверяются, а затем пользователь регистрируется. URL-адрес страницы для перенаправления обратно должен поддерживаться через этот обработать. Вы можете либо продолжать передавать URL-адрес в строке запроса, либо через скрытое поле ввода в форме.