Не может понять поведение объекта сеанса - PullRequest
1 голос
/ 13 января 2012

Я запутался в документации javax.servlet.http.HttpSession .
Там написано:

Сеансы используются для поддержания состояния и идентификации пользователя в нескольких страница запросов. Сеанс можно поддерживать с помощью файлов cookie или по перезаписи URL.

Теперь и файлы cookie, и перезапись URL-адреса обрабатываются кодом приложения на сервере (т.е. нашим кодом).

Затем говорится о том, когда сеанс рассматривается как new:

Сервер считает сеанс новым, пока он не был присоединен клиент. Пока клиент не присоединится к сеансу, метод isNew возвращает true. Значение true может указывать на один из следующих трех случаев:
1. клиент еще не знает о сеансе
2. сеанс еще не начался
3. клиент решает не присоединяться к сеансу. Этот случай произойдет, если клиент поддерживает только файлы cookie и решает отклонить файлы cookie. отправлено сервером. Если сервер поддерживает перезапись URL, этот случай обычно не происходит.

Мне не ясно, когда считается / имелось в виду, что client has joined the session.

Я имею в виду, если я не использую файлы cookie из своего веб-приложения (или перезаписи URL), и у меня есть следующее:

  1. POST с IP A на сервер
  2. 200 OK с сервера на A
  3. POST с IP A на сервер

На шаге 3 session.isNew() вернет true или false? Мне не ясно из документа.
Будет ли возвращено значение false (т. Е. Сеанс не новый), и мне придется вызвать session.invalidate(), чтобы создать новый сеанс?
Причина, по которой меня это смущает, заключается в том, что я отлаживаю часть кода, где клиент является приложением HTTP, а не веб-браузером, и я вижу, что на шаге 3 session.isNew() не возвращает true, хотя нет файлов cookie или перезапись URL в коде сервера.
Поэтому я не могу понять, что происходит под капотом.
Любая информация, которая может помочь понять это?

1 Ответ

3 голосов
/ 13 января 2012

Вот хороший пример отслеживания сеансов

Client has joined the session означает, что клиент сделал последующий запрос и включил идентификатор сеанса, который может быть распознан вашим веб-сервером. Если куки включены - jsessionid будет передаваться с куки, в противном случае - его следует включить в сам URL - как это http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1.

В JSP c:url из Core Tag Library будет обрабатывать перезапись URL для вас.

В случае связи B2B вы должны самостоятельно получить идентификатор сеанса и вручную включить его в последующие запросы.

Пример:

  1. POST с IP A на сервер
  2. 200 OK с сервера на A
  3. A получает session id из ответа
  4. POST от IP A до сервера и включает в себя полученные session id

UPDATE:

Вы можете прочитать отличную статью - "Управление сеансами через веб-интерфейс: рекомендации по управлению сеансами клиентов на основе HTTP". Это общий обзор того, как сеансы HTTP можно эмулировать и не привязывать к Java.

...