Перенаправление на реферер при отправке формы

Существует несколько страниц. На этих страницах есть ссылки. Эти ссылки приводят к странице с формой. Когда форма отправляется, страница, содержащая форму, обновляется для обработки представленных данных.

Вот вопрос.

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

То, что мне нравится делать, – это добавлять к массиву переменных сеанса каждый раз, когда страница обращается к названию «история», и добавлять только к массиву, если последний элемент $_SESSION['history'] не является текущим URL-адресом (избегайте нескольких последних записей для обновления страницы, отказа проверки формы и т. д.). По сути, это путь, где был пользователь. Когда вы обрабатываете форму – отправьте пользователя обратно в зависимости от того, какое значение имеет последнее значение, за исключением URL-адреса текущей формы, если хотите. Просто убедитесь, что задано значение по умолчанию, если нет истории.

$_SERVER['HTTP_REFERER'] может работать иногда, но у Ive были серьезные проблемы с ним, и он не работает во многих случаях (обновляется, начиная с той же страницы, набирает URL-адрес формы, исходя из электронной почты, и т. д.). Я строго избегаю этого лично, так как это может привести к ошибочному поведению и перенаправить петли, если вы не будете осторожны с ним. На самом деле я бы никогда не использовал его для перенаправления.

Эта концепция известна как Post-Redirect-Get . Возникает вопрос: всегда ли пользователь возвращается к той же статической исходной странице или есть много страниц, которые могут привести пользователя к этой форме? Если последнее верно, просто добавьте референт ( $_SERVER['HTTP_REFERER'] ) в качестве элемента формы, чтобы записать, откуда они пришли. PHP-код:

 <?php class controller { //for chaining public static function _() { return new self; } public function GET() { //dispay form } public function POST() { //process form //add errors to session if (!empty($_SESSION['form errors']) { $this->redirect($_SERVER['PHP_SELF']); } else { $this->redirect("original-user-location", true, 303); } } private function redirect($loc) { header("Location: $loc", true, 303); exit; } //ignore PUT, DELETE public function __call($_, $_) {} } controller::_()->$_SERVER['REQUEST_METHOD'](); ?>