Session expired - как завершить сеанс в исходной вкладке браузера - PullRequest
1 голос
/ 20 сентября 2011

У меня есть веб-приложение, в котором я установил максимальное время бездействия 10 минут.Это только для целей тестирования.В основном, если время сеанса истекло, и я щелкаю ссылку, браузер следующего окна проверяет, является ли сеанс действительным.Это тоже работает нормально.Если это произойдет, я получаю сообщение «сеанс истек, пожалуйста, войдите снова».Но оригинальное окно остается открытым, и если я нажму на ту же ссылку, то в этот раз я смогу увидеть страницу, хотя я не вошел в систему снова.Почему это так?

Я использую session.invalidate(), если сеанс истек, чтобы убедиться, что все атрибуты удалены, но это не работает.

Я использую следующую частькод в начале страницы:

if(request.isRequestedSessionIdValid() == false)
{
     response.sendRedirect("expired.jsp");
     session.invalidate();
     return;
}

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

Не могли бы вы дать какой-нибудь совет?


Обновление : мое веб-приложение работает следующим образом:

Пользователь получаетна страницу index.jsp и использует идентификатор и пароль для доступа к системе, то есть страница BRMspace.jsp, где есть структура папок для доступа пользователя в зависимости от того, какие документы они ищут.При нажатии на каждую папку отображается таблица с заполненной базой данных, чтобы пользователь мог загрузить нужные документы.

Проблема, с которой я столкнулся, заключается в том, что после 10 минут бездействия пользователь нажимает на одну папкуна начальном экране база данных не отображается, вместо этого я получаю сообщение о том, что сессия истекла, и я перенаправлен на страницу входа, что идеально.Однако, если я снова нажму на ту же папку, на этот раз я получу обычную таблицу с данными и всеми документами.Кажется, что после одного клика время неактивности больше не действует .... поэтому я не уверен, как это сделать ... Я использую session.invalidate(), чтобы удалить все данные о сеансе, но obvioulsy не работает.

Мне нужно, чтобы пользователь снова перенаправлялся на страницу входа после времени бездействия, независимо от того, где пользователь нажимает.

Это обновление:

Привет, у меня естьповторно ответить на этот вопрос, который был очень полезен для решения 90% моей первоначальной проблемы, но у меня все еще остался один ... в моем веб-приложении, когда при входе в систему у пользователя есть список вариантов, на которые можно нажать,каждый щелчок переносит их на новую вкладку, в которой находятся разные файлы .jsp ... если сессия истекла, на этих вкладках отображается файл expired.jsp, который идеально ... однако на исходной вкладке, отображаемой послепользовательский логин, остается в живых, я имею в виду, это не показывает, что сеанс истек ... что я могу сделать в этом случае? ...

1 Ответ

2 голосов
/ 21 сентября 2011

Веб-сессия не имеет ничего общего с какими-либо учетными данными для входа или доступа.Это просто означает, что в контейнере сохранены данные, которые можно получить, если вы передадите правильный токен сеанса (либо с помощью cookie, либо с помощью параметра запроса).Если вы были неактивны на сайте в течение определенного периода времени (в вашем случае 10 минут), эти данные отбрасываются, и если вы проверите правильность сеансов, вы узнаете, есть ли эти данные до сих пор или были сброшены.Если сеанс истек, контейнер автоматически создаст новый сеанс, чтобы вы могли обрабатывать будущие запросы.И если другой запрос будет отправлен на сервер до истечения времени ожидания, этот запрошенный сеанс не будет недействительным.

Если вы пытаетесь запретить пользователям доступ к странице, когда они не вошли в систему, вам действительно нужнопоместите некоторое значение в сеанс, который говорит, что они аутентифицированы, и проверьте это значение.Недостаточно просто проверить, является ли их запрошенный сеанс действительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...