HTTP_REFERER не работает правильно со сценарием тайм-аута? - PullRequest
0 голосов
/ 06 мая 2011

У меня есть проблема, похожая на эта , но немного другая.

У меня это структурировано так: Страница, на которую пользователь хочет перейти, похожа на 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 файлов, чтобы изменить систему входа в систему / тайм-аут. Я надеюсь, что будет более легкий путь. Мы бы сделали это в системе на основе функций, но в настоящее время мы пытаемся расширить унаследованный код.

Большое спасибо.

Edit:

Чтобы быть немного более ясным здесь. Подумайте об этом в папке, / admin /. displayData.php - один из многих файлов, доступ к которым можно получить только при входе в систему (поэтому мы не знаем, к какой конкретной странице они пытались получить доступ, когда обнаружили, что они не вошли в систему). Каждая из этих страниц перенаправляется в timeout.php по истечении сеанса (или если сеанса вообще не было), поэтому я хочу, чтобы timeout.php мог определить страницу, к которой ранее обращались без сеанса, а затем сохраните эту информацию, чтобы позже ее можно было использовать для перенаправления пользователя на исходную страницу, которую он запрашивал на нашем сайте.

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

Если это все еще недостаточно ясно, дайте мне знать.

1 Ответ

0 голосов
/ 06 мая 2011

HTTP_REFERER предназначен исключительно для информации и устанавливается браузером, а не сервером. Это означает, что он может быть пустым или что-то еще целиком. Это также может быть изменено пользователем. Лучше не полагаться на это, если это возможно.

Почему бы просто не установить $_SESSION['redirect'], когда вы фактически находитесь на странице, прежде чем она будет перенаправлена ​​в скрипт проверки сеанса? В таком случае зачем вообще перенаправлять? Вы можете включить в скрипт timeout.php, почти не измененный, и использовать переменную $_SERVER['PHP_SELF'], чтобы определить, что $_SESSION['redirect'] следует установить

...