У меня проблема, похожая на эту, но немного другая.
У меня это структурировано следующим образом: страница, на которую хочет перейти пользователь, похожа на displayData.php. Это страница, на которой они должны вернуться. Эта страница проверяет, вошли ли вы в систему и не истек ли срок действия сеанса:
if ($_SESSION["loggedIn"] != "YES")
{
header ("Location: ".$baseURL."timeout.php");
exit();
}
На timeout.php я проверяю реферер:
<?php
session_start();
$_SESSION['redirect'] = $_SERVER['HTTP_REFERER'];
$_SESSION["errorMessage"] = "Your session has timed out or<br>you have not logged in correctly.";
header ("Location: index.php");
exit();
?>
Проблема возникает после того, как пользователь отправляет форму входа и страница входа проверяет, есть ли реферер. Однако мы уже определили, что у них есть правильная информация для входа.
if(isset($_SESSION['redirect'])){
header ("Location: ".$_SESSION['redirect']);
}else{
header ("Location: menu.php");
}
Я думаю, что логически, когда страница тайм-аута устанавливает переменную с $_SERVER['HTTP_REFERER'];
, она устанавливает ее на страницу, которая перенаправляется на timeout.php, в данном случае displayData.php. Однако кажется, что вместо этого он устанавливает реферер displayData.php (который может быть чем угодно, но это не то, к чему мы хотим отправить пользователя).
Является ли это предполагаемым эффектом HTTP_REFERER, чтобы не обновлять, если было перенаправление заголовка? Если это так, то это отстой, и мне нужно переписать около 80 файлов, чтобы изменить систему входа/тайм-аута. Я надеюсь, что будет более простой способ. Мы бы сделали это в системе, основанной на функциях, но в настоящее время мы пытаемся расширить устаревший код.
Большое спасибо.
Редактировать:
Чтобы быть немного более ясным здесь. Подумайте об этом в папке /admin/. displayData.php — это один из многих файлов, к которым можно получить доступ, только войдя в систему (поэтому мы не знаем, к какой именно странице они пытались получить доступ, когда обнаружилось, что они не вошли в систему). Каждая из этих страниц перенаправляется на timeout.php по истечении сеанса (или если сеанса вообще не было), поэтому я хочу, чтобы timeout.php мог определить страницу, к которой ранее обращались без сеанса, а затем сохраните эту информацию, чтобы ее можно было использовать позже для перенаправления пользователя обратно на исходную страницу, которую он запросил на нашем сайте.
Причина, по которой я хочу сделать это через файл timeout.php, заключается в том, что есть много файлов, таких как displayData.php, и я не хочу редактировать каждый из них, чтобы улучшить систему, если мне это не нужно, на данный момент.
Если это все еще недостаточно ясно, дайте мне знать.