powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / id сессии не меняется после инвалидации
17 сообщений из 17, страница 1 из 1
id сессии не меняется после инвалидации
    #38346407
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
Обнаружил, что в моем приложении при пересоздании сессии новая получает такой же id, как у старой. Попробовал сделать простенький пример, вот такая jsp-страница:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
  <%
      out.println("session id "+session.getId()+"<br>");
      session.invalidate();
      session = request.getSession();
      out.println("new session id "+session.getId()+"<br>");
  %>
  </body>
</html>



Закрываю-открываю браузер, при первой загрузке страницы значения разные(id поменялся), после - сколько F5 ни нажимай, значения совпадают. Пример запускаю на Tomcat 6.0.35.

Нормально ли это и можно ли как-то этого избежать?
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346413
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_daЗакрываю-открываю браузер, при первой загрузке страницы значения разные(id поменялся), после - сколько F5 ни нажимай, значения совпадают. Пример запускаю на Tomcat 6.0.35.В логе апача есть повторные обращения?
"F5" - это указание "обновить страницу, если она устарела". Без дополнительных усилий браузер, весьма вероятно, достаёт страницу из кэша.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346415
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Firebug'ом видно, что не из кэша. Чтобы исключить сомнения, добавил вот такую строчку в приведенный выше тестовый jsp:
Код: java
1.
out.println("time: "+new Date() +"<br>");
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346419
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы ещё как-то понял ситуацию "отлаживаю чужое приложение", но для собственного сервера - в чём проблема глянуть в его лог?
Есть ведь и условные запросы и статус 305 - Not Modified .
Кроме того, очень странно в рамках одного запроса и создать и инвалидировать сессию.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346421
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov 3054 - Not Modified
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346579
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Прошу прощения, видимо, я не достаточно четко описал ситуацию. Смотрю под отладчиком:
Код: java
1.
2.
3.
4.
HttpSession session = request.getSession(); // сессия есть
session.invalidate();
assert request.getSession(false) == null; //убедился, сессия инвалидирована
request.getSession(); // создалась новая сессия. Выданный id совпадает с предыдущим



Я предположил, что в моем приложении ошибка и создал тестовый пример(jsp из первого поста), но оказалось, что и в нем описанное мной поведение воспроизводится. Возник вопрос: насколько такое поведение нормально и можно ли с ним бороться?

>Кроме того, очень странно в рамках одного запроса и создать и инвалидировать сессию.
Замысел был в том, чтобы изменить id сессии. Если это должно делается иначе, подскажите, пожалуйста, как?
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346635
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_daДобрый день,
Обнаружил, что в моем приложении при пересоздании сессии новая получает такой же id, как у старой...

...Нормально ли это и можно ли как-то этого избежать?

При инвалидации сессии происходит всего лишь анбайндинг аттрибутов и объектов, ассоциированных с ней. Сам инстанс сессии не удаляется и, грубо говоря, никакой JSR не заставляется реализации контейнеров сервлетов принудительно удалять его.
Механизмы работы с сессией описаны в главе 7 Session JSR 315: Java Servlet 3.0 Specification . Ваш вопрос освещён в 7.2 Creating a Session .

Если вам действительно нужно избавиться от идентификатора сессии попробуйте "очистить" куки на сервере, предварительно ознакомившись с главой 7.1 Session Tracking Mechanisms того же JSR. Гарантии нет.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346668
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmitriyche, спасибо за ссылку. Прочитал, действительно гарантий никаких не дается относительно уникальности идентификатора. В таком случае, переформулирую вопрос: Стоит задача в определенный момент изменить идентификатор сессии клиента, как это можно сделать?
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346689
iMove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_dadmitriyche, спасибо за ссылку. Прочитал, действительно гарантий никаких не дается относительно уникальности идентификатора. В таком случае, переформулирую вопрос: Стоит задача в определенный момент изменить идентификатор сессии клиента, как это можно сделать?Я на 100% уверен, что настоящая задача звучит иначе, а вы решили, что надо это делать через изменение идентификатора сессии. Абстрагируйтесь от этого идентификатора, и скажите, чего на самом деле необходимо достичь.
Вам надо для каждой новой сессии иметь некий уникальный идентификатор, верно? Если да, то во время создания новой сессии просто запихните в нее какой-нибудь UUID. и все.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346692
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_da,

Если у вас сессия трекается через куки
dmitriyche...Если вам действительно нужно избавиться от идентификатора сессии попробуйте "очистить" куки на сервере, предварительно ознакомившись с главой 7.1 Session Tracking Mechanisms того же JSR. Гарантии нет.


вот вам ликн
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38346697
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMove...
Вам надо для каждой новой сессии иметь некий уникальный идентификатор, верно? Если да, то во время создания новой сессии просто запихните в нее какой-нибудь UUID. и все.

Существует понятие "новой" сессии:
Глава 7.2 Creating a SessionA session is considered “new” when it is only a prospective session and has not been established. Because HTTP is a request-response based protocol, an HTTP session is considered to be new until a client “joins” it. A client joins a session when session tracking information has been returned to the server indicating that a session has been established. Until the client joins a session, it cannot be assumed that the next request from the client will be recognized as part of a session.

The session is considered to be “new” if either of the following is true:
- The client does not yet know about the session
- The client chooses not to join a session.

These conditions define the situation where the servlet container has no mechanism by which to associate a request with a previous request.

A Servlet Developer must design his application to handle a situation where a client has not, can not, or will not join a session.


Также следует помнить, что сервлет контейнет создаёт сессию.

В общем,
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38347797
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, сессия трекается через куки.

iMoveЯ на 100% уверен, что настоящая задача звучит иначе, а вы решили, что надо это делать через изменение идентификатора сессии.
Стоит задача защититься от атаки типа Фиксация сессии . Как я себе понимаю, для этого необходимо принудительно поменять идентификатор сессии.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38347834
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_daСтоит задача защититься от атаки типа Фиксация сессии . Как я себе понимаю, для этого необходимо принудительно поменять идентификатор сессии.Нет, не нужно.

P.S. Уже есть реальный пример взлома или занимаетесь преждевременной оптимизацией?
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38347936
abc_daСтоит задача защититься от атаки типа Фиксация сессии.

http://www.tomcatexpert.com/blog/2011/04/25/session-fixation-protection

авторSession fixation protection is turned on by default in all Apache Tomcat 7 versions and from Apache Tomcat 6.0.21 on.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38348613
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovУже есть реальный пример взлома или занимаетесь преждевременной оптимизацией?
Реального примера нет, есть требование.

календаревед,
спасибо за ссылку. Похоже, это как раз то, что нужно использовать. Попробую придумать, как прикрутить это к своему приложению.
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38355730
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, прикрутить описанное выше решение не получилось.
Возвращаясь к примеру из моего первого поста, обнаружилось, что описанное поведение наблюдается только если в server.xml установлен параметр emptySessionPath="true" . В документации связи между этим параметром и неменяющимся идентификатором сессии я не нашел. Возможно, у кого-то есть мысли, почему так выходит?
...
Рейтинг: 0 / 0
id сессии не меняется после инвалидации
    #38355747
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оказалось, нужно было повнимательнее погуглить. В доке к томкату нашел фразу: "A side effect to setting this to true, is that if Tomcat creates a new session it will attempt to use the cookie session id if supplied by the client.". Соответственно, выходит, при инвалидации и пересоздании сессии в рамках одного запроса новая сессия всегда будет получать идентификатор от старой.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / id сессии не меняется после инвалидации
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]