Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / id сессии не меняется после инвалидации / 17 сообщений из 17, страница 1 из 1
27.07.2013, 18:13:38
    #38346407
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Добрый день,
Обнаружил, что в моем приложении при пересоздании сессии новая получает такой же 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
27.07.2013, 18:29:45
    #38346413
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
abc_daЗакрываю-открываю браузер, при первой загрузке страницы значения разные(id поменялся), после - сколько F5 ни нажимай, значения совпадают. Пример запускаю на Tomcat 6.0.35.В логе апача есть повторные обращения?
"F5" - это указание "обновить страницу, если она устарела". Без дополнительных усилий браузер, весьма вероятно, достаёт страницу из кэша.
...
Рейтинг: 0 / 0
27.07.2013, 18:37:48
    #38346415
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Basil A. Sidorov,

Firebug'ом видно, что не из кэша. Чтобы исключить сомнения, добавил вот такую строчку в приведенный выше тестовый jsp:
Код: java
1.
out.println("time: "+new Date() +"<br>");
...
Рейтинг: 0 / 0
27.07.2013, 18:46:33
    #38346419
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Я бы ещё как-то понял ситуацию "отлаживаю чужое приложение", но для собственного сервера - в чём проблема глянуть в его лог?
Есть ведь и условные запросы и статус 305 - Not Modified .
Кроме того, очень странно в рамках одного запроса и создать и инвалидировать сессию.
...
Рейтинг: 0 / 0
27.07.2013, 18:47:49
    #38346421
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Basil A. Sidorov 3054 - Not Modified
...
Рейтинг: 0 / 0
28.07.2013, 13:09:53
    #38346579
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
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
28.07.2013, 15:40:54
    #38346635
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
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
28.07.2013, 17:18:44
    #38346668
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
dmitriyche, спасибо за ссылку. Прочитал, действительно гарантий никаких не дается относительно уникальности идентификатора. В таком случае, переформулирую вопрос: Стоит задача в определенный момент изменить идентификатор сессии клиента, как это можно сделать?
...
Рейтинг: 0 / 0
28.07.2013, 17:53:45
    #38346689
iMove
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
abc_dadmitriyche, спасибо за ссылку. Прочитал, действительно гарантий никаких не дается относительно уникальности идентификатора. В таком случае, переформулирую вопрос: Стоит задача в определенный момент изменить идентификатор сессии клиента, как это можно сделать?Я на 100% уверен, что настоящая задача звучит иначе, а вы решили, что надо это делать через изменение идентификатора сессии. Абстрагируйтесь от этого идентификатора, и скажите, чего на самом деле необходимо достичь.
Вам надо для каждой новой сессии иметь некий уникальный идентификатор, верно? Если да, то во время создания новой сессии просто запихните в нее какой-нибудь UUID. и все.
...
Рейтинг: 0 / 0
28.07.2013, 18:05:20
    #38346692
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
abc_da,

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


вот вам ликн
...
Рейтинг: 0 / 0
28.07.2013, 18:19:15
    #38346697
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
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
29.07.2013, 19:02:09
    #38347797
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Да, сессия трекается через куки.

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

P.S. Уже есть реальный пример взлома или занимаетесь преждевременной оптимизацией?
...
Рейтинг: 0 / 0
29.07.2013, 21:34:06
    #38347936
id сессии не меняется после инвалидации
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
30.07.2013, 13:21:18
    #38348613
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Basil A. SidorovУже есть реальный пример взлома или занимаетесь преждевременной оптимизацией?
Реального примера нет, есть требование.

календаревед,
спасибо за ссылку. Похоже, это как раз то, что нужно использовать. Попробую придумать, как прикрутить это к своему приложению.
...
Рейтинг: 0 / 0
05.08.2013, 19:15:55
    #38355730
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
К сожалению, прикрутить описанное выше решение не получилось.
Возвращаясь к примеру из моего первого поста, обнаружилось, что описанное поведение наблюдается только если в server.xml установлен параметр emptySessionPath="true" . В документации связи между этим параметром и неменяющимся идентификатором сессии я не нашел. Возможно, у кого-то есть мысли, почему так выходит?
...
Рейтинг: 0 / 0
05.08.2013, 19:30:15
    #38355747
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id сессии не меняется после инвалидации
Оказалось, нужно было повнимательнее погуглить. В доке к томкату нашел фразу: "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
Форумы / Java [игнор отключен] [закрыт для гостей] / id сессии не меняется после инвалидации / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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