Насколько уникален HttpSession.getId ()? - PullRequest
4 голосов
/ 07 декабря 2010

Гарантируется ли значение, возвращаемое HttpSession.getId(), уникальным во времени или уникальным только среди всех активных сеансов?

Другими словами, могу ли я использовать его в качестве ключа для записи в журнале сеанса (какой пользователь вошел в систему, когда и как долго)?

Если getId зависит от реализации (что, я полагаю, так как спецификация J2EE ничего не говорит об этой проблеме), как это обрабатывается в Google App Engine?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Насколько я знаю, идентификаторы сеанса уникальны только до тех пор, пока вы не перезапустили веб-сервер.Таким образом, идентификатор сессии уникален во времени в течение жизненного цикла вашего веб-сервера.

В Apache Tomcat вы можете проверить ManagerBase.generateSessionId () , чтобы узнать, как генерируется идентификатор.Но будьте осторожны, в Tomcat сгенерированные идентификаторы уникальны только в одном контексте.

надеюсь, что это помогло

2 голосов
/ 07 декабря 2010

Да, это зависит от реализации .Как и для любого метода в любом интерфейсе :-).Программист должен убедиться, что идентификатор уникален.

Если вы используете ManagerBase.createSession (java.lang.String) в сочетании с UUID на 100% уверены, что ваш идентификатор будет уникальным.

1 голос
/ 09 июля 2011

Вопрос касается Google App Engine. GAE основан на Jetty, а не Tomcat, поэтому вы не можете использовать ManagerBase.createSession (java.lang.String).Сеанс распространяется и сохраняется в хранилище данных (или в memcached).Он отслеживается с помощью файла cookie (называемого JSESSONID), который управляется контейнером сервлета.В Datastore есть сущности вида _ah_SESSION с идентификатором, который является идентификатором сеанса с префиксом "_ahs".В настоящее время объекты _ah_SESSION не удаляются автоматически.Таким образом, ответ: в настоящее время идентификатор сеанса в GAE является уникальным во времени .

...