Где хранятся атрибуты Java HttpSession? - PullRequest
20 голосов
/ 30 апреля 2011

Сериализуются ли объекты и отправляются ли пользователю и обратно по каждому соединению (хранятся в файлах cookie)?

Или они хранятся в куче сервера, а файл cookie - это очень маленький идентификатор?

Любая информация по этой теме будет полезна.

Спасибо

Ответы [ 2 ]

20 голосов
/ 30 апреля 2011

Вы получили это во втором предположении.

Файл cookie содержит JSESSIONID. Этот идентификатор используется для поиска HttpSession пользователя на карте, поддерживаемой сервером. По крайней мере, это самый распространенный способ. Существуют более сложные способы, с помощью которых сервер может реализовать это, но пересылка всего состояния обратно в файл cookie не является одним из них.

Это имеет некоторые последствия. Во-первых, если сервер выходит из строя, вы теряете состояние сеанса. Во-вторых, если у вас есть кластер серверов, вам нужно каждый раз подключать пользователей к одному и тому же серверу, иначе они потеряют сеанс между последующими запросами. Наконец, перехват сеансов становится возможным, если кто-то находит способ скопировать чужой JSESSIONID и заменить его им.

7 голосов
/ 30 апреля 2011

Файл cookie содержит только идентификатор сеанса (обычно называется JSESSIONID). Сервер сопоставляет этот идентификатор с любыми данными, которые в данный момент хранятся в сеансе пользователя.

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

...