Tomcat Уникальный SessionId - PullRequest
       3

Tomcat Уникальный SessionId

2 голосов
/ 04 октября 2011

Есть ли способ настроить (xml) tomcat (6.x) для генерации уникального SessionId. (Без расширения ManagerBase / StandardManager).

Ответы [ 3 ]

6 голосов
/ 04 октября 2011

Я фиксирую данные для входа пользователя в таблицу db с идентификатором сеанса в столбце с уникальным ограничением, и получаю исключение уникального ограничения

Вы не должнысохранить сгенерированный Tomcat ID сеанса как уникальное ограничение в БД.Это не имеет никакого смысла.Идентификатор сеанса Tomcat уникален только во всех существующих активных сеансах.Спецификация сервлета не запрещает повторно использовать идентификатор сеанса с истекшим сроком для нового сеанса в некоторый момент, месяцы или годы спустя.С шестнадцатеричной строкой фиксированной длины в качестве идентификатора сеанса все возможные идентификаторы не являются «неограниченными».Вы не можете предотвратить его повторное использование для другого клиента в какой-то момент.

Я не понимаю, почему вы когда-либо сохраняли бы сгенерированный Tomcat ID сеанса в течение всей жизни БД.Вы должны удалить его из БД, когда он истек.Или вы должны решить свою проблему по-другому.Поскольку вы ничего не заявили о функциональных требованиях этого «решения», я не могу дать более подходящий ответ.Однако вот несколько советов:

  • Сделайте все наоборот: вставьте или выберите необходимые данные в / из БД, получите сгенерированный БД идентификатор и сохраните его в качестве атрибутаHttpSession.Например, вошедший в систему идентификатор пользователя или только весь объект User.

  • Или, если необходимо увеличить время жизни сеанса по умолчанию, например, параметр «Запомнить меня», тогда вы должны сгенерировать UUID самостоятельно (и проверить, если он еще не существует в БД) и использовать его в отдельном cookie.

0 голосов
/ 05 апреля 2013

Просто используйте составной первичный ключ, как CONSTRAINT PRIMARY KEY ("SID", datum);

0 голосов
/ 24 августа 2012

Я работаю над этой проблемой самостоятельно, и я хотел бы отметить, что можно сгенерировать гарантированный уникальный идентификатор, используя 128 бит (32 шестнадцатеричных цифры), используя UUID. Он основан на времени UTC и гарантированно будет уникальным, если различаются временные метки usec, при которых генерируются разные UUID.

См. Также RFC4122: https://www.ietf.org/rfc/rfc4122.txt

Java имеет стандартный класс для генерации этих идентификаторов:
http://docs.oracle.com/javase/6/docs/api/java/util/UUID.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...