Почему помнишь меня токен? - PullRequest
7 голосов
/ 15 марта 2011

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

В меру моего понимания, запомни меня токенможет использоваться для входа в систему и создания нового токена сеанса, в то время как токен сеанса длится всего несколько минут или до тех пор, пока пользователь не закроет браузер.Почему мы не можем увеличить срок действия самого токена сеанса до желаемого времени, до которого мы хотим, чтобы пользователь вошел в систему?

У меня есть потребность реализовать такую ​​функциональность в работающем приложении на основе flexчерез tomcat, и мне интересно, нужно ли мне помнить токены

Кроме того, возможно ли получить эту функциональность из коробки в tomcat?

Ответы [ 5 ]

12 голосов
/ 18 марта 2011

1) Сессии обычно содержат целый набор данных, кроме имени пользователя.Поэтому, если вы просто установите дату истечения срока действия в несколько недель или месяцев, как токен запомнить меня, вы, вероятно, столкнетесь с проблемами производительности на сервере из-за тысяч или миллионов тяжеловесных объектов сеанса.

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

3 голосов
/ 15 марта 2011

Поскольку по определению сеанс заканчивается, как только пользователь закрывает свой браузер. Таким образом, сессия cookie истекает, как только браузер закрывается.

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

Чтобы получить эту функциональность "из коробки", посмотрите на использование фреймворка, такого как Spring Security .

1 голос
/ 18 марта 2011

Cookie-файлы Запомнить меня обычно хранят имя пользователя и какой-то токен.Оба они используются для аутентификации пользователя.Взгляните на Усовершенствованный файл cookie для постоянного входа в систему , который описывает процесс довольно хорошо.

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

Таким образом, cookie-файлы "помни меня" имеют более длительный срок службы (обычно дни или недели), чем cookie-файлы сеанса.Сеансовые cookie-файлы обычно истекают через несколько минут или после закрытия браузера.

Сверху головы есть несколько причин, по которым используются два разных cookie-файла:

  • Если толькобудет использоваться постоянный файл cookie, запоминаемый мной, который потребуется серверу для аутентификации пользователя при каждом запросе.Когда используется дополнительный файл cookie сеанса, сервер не должен делать это, пока сеанс действителен.Конечно, идентификатор сеанса может быть сохранен в cookie-файле запомнить, но какой в ​​этом смысл?
  • С точки зрения кодирования лучше повторно использовать существующий механизм сеанса.Зачем изобретать велосипед, а не просто добавить функцию (аутентификацию через cookie-файл запомнить), которую можно легко включить / отключить?
0 голосов
/ 06 декабря 2016

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

Jetty (и, возможно, многие другиеКонтейнеры сервлетов) имеет функцию, которая позволяет автоматически вытеснять незанятые сеансы из памяти на диск или в базу данных, что, IMHO, исключает все вышеперечисленные обоснования проблем производительности, возникающих при хранении тяжеловесных сеансов в памяти.

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

Короче говоря, запомнить меня - это механизм аутентификации, а не замена cookie-файлов сеанса.

Я считаю, что хорошо иметь долгосрочные даты истечения сеанса, если они хранятся в памяти.,И как только они истекают, просто спросите пароль.Многие веб-сайты предлагают эту функцию как «Запомнить меня на 30 дней», что достигается путем использования долговременного cookie sessionId, и ничего больше.

0 голосов
/ 17 июня 2012

Люди правильно сказали, что сеанс содержит несколько объектов с большим весом.При достаточном количестве пользователей в вашей системе, если вы попытаетесь удержать их всех в ограниченном объеме памяти, которую имеет сервер, в конечном итоге вы выйдете из строя сервера, когда этого объема памяти не будет.

Я работал над проектом один разгде при обновлении производственного кода произошла утечка памяти.Это был проект J2EE (да, J2EE не Java EE).Когда пользователь вошел в систему, чтобы проверить свой счет в этой телефонной компании, сеанс пользователя не был освобожден должным образом из памяти (я не могу вспомнить причину, но это была определенно проблема).Эта ошибка имитирует то, что вы просили сделать специально.

Сервер продолжал падать.Таким образом, мы поместили на него профилировщик.Мы наблюдали бы за увеличением использования памяти в течение дня, пока оно не достигнет максимума и вскоре после сбоя сервера приложений.Мы добавили память и увеличили настройку памяти виртуальной машины.Я сказал им, что это утечка памяти, но потому что я не был «экспертом по серверу» за 200,00 долларов в час, люди не хотели в это верить, потому что люди, которые были там, все еще верили, что сборщик мусора был мощным, а не просто очень хорошим.

Два дня спустя (это затронуло систему «просмотр счета», а не основную бизнес-систему, т. Е. У нее не было той же рабочей нагрузки или требований к памяти, даже несмотря на то, что на серверах было достаточно аппаратной памяти)они наняли пару консультантов по 200 долларов в час, которые через день сказали им, что в приложении обнаружена утечка памяти.Это было исправлено, и все было хорошо ... за вычетом гонораров консультантов.

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

...