2014-09-12 4 views
1

Я изучаю, как работает конкретное веб-приложение, и я хочу точно определить, какая информация хранится в токенах сеанса JSESSIONID.Где хранится JSESSIONID?

Я понимаю, что токены PHPSESSSID хранятся [в зависимости от сервера] в таких местах, как/tmp /,/var/lib/php/session или/var/lib/php5/session.

Мой вопрос: хранятся ли JSESSIONID аналогичным образом? Существуют ли определенные файлы конфигурации для проверки того, где они хранятся? Есть ли альтернативный метод определения того, что находится в токене сеанса, не проходя через всю базу кода? Например, с PHP я могу просто проверить файл токена сеанса и посмотреть, какие основные компоненты хранятся (возможно, имя пользователя, авторизованный флаг и т. Д.).

спасибо.

+2

Bishan: Я уже рассмотрел это сообщение перед отправкой вопроса. Если вы потратите время на чтение, вы увидите, что у него нет информации о том, где хранятся сеансы. – Peleus

ответ

1

Для запуска JSESSIONID хранится в файле cookie. Если файлы cookie отключены, вам нужно переписать URL-адрес, чтобы сохранить jsessionid в URL-адресе. В сеансе cookie нет ничего другого. Там нет ничего не хранится в сессии до одного из следующих событий:

  1. аутентификации в контейнере
  2. request.getSession() или request.getSession (истина) называется

Как только это произойдет, , вы можете хранить информацию в сеансе. При вызове request.getSession() он возвращает HttpSession. HttpSession реализует сериализуемое. Как только этот объект существует, когда запрос заканчивается, этот объект сериализуется. Каждый контейнер предоставляет разные способы хранения сериализованного объекта HttpSession. По умолчанию большинство серверов делают это в памяти. В большинстве контейнеров вы будете многократно выбирать, как выбрать объекты HttpSession (память, диск, база данных). Большинство контейнеров также даст вам возможность настроить и создать собственный способ сериализации HttpSession.

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

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

  1. Реализовать javax.servlet.http.HttpSessionListener и хранить JSESSIONID в базу данных
  2. Реализовать javax.servlet.http.HttpSessionAttributeListener и хранить пары ключ/значение в базе данных с идентификатором сессии

При реализации любого из вышеуказанных интерфейсов вы не сможете получить имя пользователя из аутентификации, если только вы не храните информацию в сеансе. Вы можете добавить двух слушателей в любое веб-приложение, не влияя на исходное поведение файлов war/ear.

По умолчанию серверы приложений затрудняют получение информации, которую вы ищете, но с небольшим количеством кодирования вы можете обойти ее.

-2

Каждый сервер приложений определит его собственный способ хранения этих данных (и вам обычно разрешается изменять его на что-то другое), но вы обычно не будете иметь прямого доступа к нему.

Если вы хотите, чтобы значения, заданные в сеансах, вы могли использовать объекты HttpSessionAttributeListener для получения событий, когда код устанавливает какое-либо значение для сеанса или удаляет его.

-2

Каждое приложение имеет свои сеансы и sessionId на сервере приложений. управление сеансом в java зависит от того, как управлять им. Обычно сеанс хранится в файлах cookie. HttpSessionAttributeListener вы можете использовать объект этого класса для получения событий.

мы можем разработать фасоль с сеансом имен или любым вашим желанием и реализовывать интерфейс HttpSession для получения методов шаблонов.

Этот компонент будет содержать всю информацию, которую вы хотите сохранить в сеансе.

+2

сеансы не хранятся в файлах cookie. Только идентификатор сеанса хранится в файле cookie. – celias

0

Tomcat хранит ваши данные сеанса только на выключенном компьютере и только в том случае, если данные сеанса сериализуемы, и только если вы настроили сеансы, чтобы выжить в перезапусках. Так что нет папки temp/var для поиска почти для каждого кота в мире.

+0

Неверно. Если вы используете PersistentManager, он сохраняет сеансы всякий раз, когда они пассивируются. Если вы используете DeltaManager, он реплицирует их по всему кластеру. Если вы используете BackupManager, он поддерживает их до назначенного резервного узла. – EJP

+0

@EJP Полностью правильный. * Если * вы * сконфигурируете * хранилище, узел хранения или сеть хранения данных, будут записаны данные. – Hannes

Смежные вопросы