Какова цель суффикса JSESSIONID?

После использования браузера для аутентификации в моей службе я обнаружил набор файлов cookie со следующей парой ключ\значение:

JSESSIONID=40d4b01c47ddb858718291d319a1a817d3037fdc6f2c341c195a94dc6ee8e8a1.e38Lb3qTb3aKai0RbxeMahqNbN90; path=/MyService; secure

Обратите внимание на суффикс (например, после '.' : e34Mc3uLa3yPbO0La3aNa3eTc38Ke0)

Когда я использую API Java servetl для получения идентификатора сеанса (javax.servlet.http.HttpSession.getId()), я получаю следующее значение

40d4b01c47ddb858718291d319a1a817d3037fdc6f2c341c195a94dc6ee8e8a1

Это то же самое, что и первая часть значения переменной cookie, которую я только что упомянул!

Однажды я пытался поддерживать сеанс между несколькими HTTP-запросами в ColdFusion (CF) (это нормально, если вы не знаете, что такое CF, это просто платформа для разработки приложений), и я не мог поддерживать сеанс, если я установил файл cookie переменная JSESSIONID до всего значения, которое я упомянул в начале этого вопроса. Чтобы правильно поддерживать сеанс, мне пришлось отправить первую часть идентификатора сеанса (т.е. до '.')

Итак, мой вопрос: почему API сервлета возвращает часть JSESSIONID, а значение cookie, возвращаемое с сервера, имеет суффикс? Откуда взялся этот суффикс и для чего он нужен?


person Muhammad Gelbana    schedule 12.11.2014    source источник


Ответы (1)


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

В некластерных установках полезно убедиться, что сеанс действительно принадлежит серверу. Представьте себе настройку балансировки нагрузки с фиксированными сеансами и сбоем сервера. Запросы теперь направляются на другой сервер. Теоретически этот сервер также может иметь сеанс с тем же идентификатором сеанса. Затем пользователь попадет в сеанс, который ему не принадлежит. Добавление уникального суффикса сервера позволяет серверу приложений не восстанавливать сеансы, которые не были созданы на том же сервере.

Вы можете получить представление об этом здесь: https://developer.jboss.org/message/879684 где обсуждаются различия в этом самом поведении между jboss 7 и wildfly 8.1.

person noamik    schedule 08.01.2015