У меня есть сайт с открытым и закрытым разделами.Чтобы получить доступ к закрытым областям, пользователи должны войти в систему, которая устанавливает переменные сеанса.Сценарий входа аутентифицирует все и затем изменяет местоположение заголовка на личную страницу:
//get info from database and if user is authorized, then redirect
session_start();
$_SESSION['authorized'] = $user;
$_SESSION['firstname'] = $first;
$_SESSION['lastname'] = $last;
$_SESSION['password'] = $pass;
$_SESSION['position'] = $position;
$_SESSION['email'] = $email;
header( "Location: index2.php" );
Затем на странице index2.php у меня вверху проверка авторизации:
session_start();
if(!isset($_SESSION['authorized'])){
header( "Location: denied_unauth.php" );
die();
}else{
//rest of page
Все работает как шарм.КРОМЕ ... если в течение 20 минут не происходит никаких действий, пользователи должны снова войти в систему. Index2.php использует jQuery для загрузки в него div, поэтому пользователи никогда не покидают index2.php.Если они щелкают, чтобы получить страницу на закрытом сайте после неактивности, вместо запрашиваемого div, они получают сообщение «Выйти из системы» и снова получают форму входа.Это тот же сценарий, что и приведенный выше, устанавливающий те же переменные сеанса и перенаправляющий их обратно на ту же самую страницу (index2.php), то есть на ту же страницу, с которой они входят - в основном, просто перезагрузив страницу.
Всякий раз, когда я проверяю это, index2.php не распознает новый сеанс.Он отправляет пользователей на "denied_unauth.php" каждый раз.Это говорит мне, что скрипт входа в систему работает, он распознает имя пользователя и пароль и отправляет пользователей на index2.php ... но когда страница перезагружается index2.php, сеанс не распознается.Я даже попытался добавить случайное число в конец URL "index2.php? somerandomnumber на случай, если это была проблема с кэшированием, но это не помогло.
Есть идеи?
РЕДАКТИРОВАТЬ: Чтобы было ясно, я не прошу способ ОСТАНОВИТЬ пользователя, вышедшего из системы. Я пытаюсь выяснить, почему, если новые переменные сеанса создаются во время сценария входа в систему, он не распознает их при перезагрузке страницы. Переменные сеанса создаются при первом входе в систему, поэтому я знаю, что часть скрипта работает. Но когда они снова возвращаются на страницу после повторной регистрации, это нераспознать новый $ _SESSION ['авторизованный'].
РЕДАКТИРОВАТЬ 2: Вот что происходит:
- Со страницы index.php, пользователь входит в систему. Форма входа создаетсеанс и перенаправляет заголовок на index2.php
- Страница index2.php проверяет, установлен ли сеанс, если нет, то выгоняет пользователя на страницу «отказано в доступе».
- Пользователь нажимает ссылки внутристраница index2.php для загрузки разделов вe main div
- Каждый файл, который загружается в основной div, проверяется, установлен ли сеанс.Если сеанс существует, то файл загружается, если срок действия сеанса истек, а не файл, он показывает пользователю форму входа в систему и просит их снова войти в систему (пока все это работает)
- Когдапользователь снова входит в эту форму, создается новый набор переменных сеанса.Я попытался установить новый сеанс или session_regenerate_id (), и ни один из них, похоже, не работает.
- Этот новый сеанс НЕ распознается index2.php, и он каждый раз выводит их.Я пытался как перенаправить прямо на index2.php после входа в систему, так и просто загрузить div, который они запрашивали в первую очередь, но в обоих случаях index2.php не видит, что сеанс установлен, и пользователь заканчивается настраница "отказано в доступе".