jsessionid игнорируется

Я использую URL-адрес с jsessionid, например.

http://localhost:8080/myservlet;jsessionid=123

Тем не менее, всякий раз, когда я читаю идентификатор сеанса в HttpServletRequest, значение никогда не равно 123, а вместо этого сгенерированный идентификатор сеанса, например. B663A96D3FBC84B4A427C0810EAB9073.

Почему мой jsessionid игнорируется?


person chris    schedule 12.09.2011    source источник
comment
Как вы сгенерировали этот идентификатор сеанса? Какой контейнер вы используете (tomcat и т. д.)? Вы не можете просто установить JSESSIONID самостоятельно...   -  person home    schedule 12.09.2011


Ответы (2)


Это потому, что вы указали идентификатор сеанса, для которого в памяти сервера не существует конкретного объекта HttpSession. Другими словами, данный идентификатор сеанса неизвестен/недействителен. Вам необходимо указать идентификатор сеанса, который ссылается на действительный и существующий объект HttpSession в памяти сервера.

Предположим, что у вас действительно есть действительный HttpSession с идентификатором B663A96D3FBC84B4A427C0810EAB9073, который в настоящее время находится в памяти сервера, тогда следующая ссылка будет работать и даст конечному пользователю доступ именно к этому HttpSession:

http://localhost:8080/myservlet;jsessionid=B663A96D3FBC84B4A427C0810EAB9073

person BalusC    schedule 12.09.2011

Я предполагаю, что большинство серверов приложений в наши дни по умолчанию используют файлы cookie для отслеживания сеансов, а не для перезаписи URL. Так что, если ваш запрос содержит как файл cookie сеанса, так и JSESSIONID в URL-адресе, он, вероятно, будет использовать файл из файла cookie. Проверьте документацию вашего сервера приложений, чтобы узнать, как это настроить.

person millimoose    schedule 12.09.2011
comment
Не правда. Серверы Java поддерживают оба. - person Bastian Voigt; 09.12.2016
comment
@BastianVoigt В моем ответе сказано, что по умолчанию используется не только поддержка. Если сервер настроен на использование обработки сеансов на основе файлов cookie, он вообще не будет считывать jsessionid из строки запроса, потому что зачем это делать? - person millimoose; 10.12.2016
comment
По крайней мере, все java-серверы, которые я использовал (tomcat, glassfish, jboss и jetty), по умолчанию поддерживают одновременно и файлы cookie, и параметры URL для jsessionid, хотя их невозможно настроить для использования одного или другого. - person Bastian Voigt; 11.12.2016
comment
Верно, а когда оба присутствуют в запросе, что произойдет? Сервер может использовать только один из этих методов для любого заданного запроса, поэтому по умолчанию он обязательно будет использовать только один, и, скорее всего, это будет файл cookie для большинства клиентов. Кроме того, буквально все современные серверы поддерживают эту настройку, поскольку она является частью API Java EE: docs.oracle.com/javaee/6/api/javax/servlet/ - person millimoose; 12.12.2016
comment
А, теперь я понял вашу точку зрения :) Я собираюсь отредактировать ваш ответ, чтобы сделать его более ясным, надеюсь, вы согласны. Извините за недопонимание - person Bastian Voigt; 13.12.2016