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

Разрабатываю CMS. У меня есть три сценария и 2 переменные сеанса

 $_SESSION['logged']
 $_SESSION['redirect'] 

«auth.inc.php» - запускается каждый раз, когда пользователь запрашивает страницу. Он проверяет, установлен ли $ _SESSION ['logged'] и равен 1. Если это не так, перенаправляет главную страницу, используя

header(location:index.php)

а ссылка реферера страницы сохраняется в $ _SESSION ['redirect']. Если $ _SESSION ['logged'] установлен, время бездействия меньше требуемого значения, он перенаправляет на запрошенную страницу, в противном случае он перенаправляется на logout.php

"index.php" - проверяет имя пользователя и пароль. Я удачные наборы

$_SESSION['logged']=1

Если установлено значение $ _SESSION ['redirect'], выполняется перенаправление на эту страницу, в противном случае - на страницу с ошибкой.

"logout.php" - отключает и уничтожает сеанс, используя

session_unset();
session_destroy();

Но я хочу, чтобы пользователь вышел из системы из-за тайм-аута сеанса, тогда после входа в систему он должен быть перенаправлен на старую страницу. Поскольку я отключил сеанс, $ _SESSION ['redirect'] был потерян. Поэтому вместо использования session_unset () я сбрасываю только $ _SESSION ['logged']

unset($_SESSION['logged']);
session_destroy();

но все же я не могу получить $ _SESSION ['redirect'] после session_destroy (). Переменная все еще не установлена. Как мне перенаправить на старую страницу после выхода из системы из-за истечения срока действия сеанса


person Gunjan Nigam    schedule 18.08.2011    source источник


Ответы (3)


session_destroy () фактически уничтожит данные текущего сеанса. Чтобы использовать любое установленное вами значение, вам нужно снова запустить session_start ().

Кроме того, если сеанс истекает, ничто из того, что вы установили в качестве файла cookie сеанса, не будет действительным.

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

Удачи!

person Andreas Eriksson    schedule 18.08.2011

Ну, ваша первая проблема заключается в том, что вы все еще уничтожаете $ _SESSION ['redirect'], когда вызываете session_destroy (). Что вы можете сделать, это либо жестко запрограммировать URL-адрес по умолчанию в системе, чтобы вы могли уничтожить сеанс и по-прежнему перенаправлять. Другой вариант - удалить команду session_destroy () до тех пор, пока вы не перенаправите .... то есть на странице перенаправления проверьте, была ли предыдущая страница (referer) logout.php, если она была уничтожена сеансом, иначе не

person Marc Towler    schedule 18.08.2011

@Marc Towler: Извините, я не могу оставлять комментарии. Что я хочу сказать, так это то, что не все браузеры поддерживают референтные страницы, такие как IE.

person Wei    schedule 18.08.2011
comment
Привет, Вей, я имел в виду и должен прояснить, что я имел в виду использовать реферер сервера, в примере с Apache это будет $ _SERVER ['HTTP_REFERER'] - person Marc Towler; 18.08.2011