То, как я сохраняю пользователя, входило в мой сайт в течение многих месяцев?

Я использую OpenID. То, как я делаю его так, чтобы пользователь остался, входило в систему в течение долгого времени даже после закрытия окна браузера?

Как я храню и получаю доступ к пользователю User объект?

В основном я предполагаю, что просто действительно не понимаю, как сессии работают в Java.

17
задан BalusC 19 April 2013 в 15:09
поделиться

2 ответа

Значит, вам действительно нужен вариант «Запомнить меня на этом компьютере»? На самом деле это не связано с частью OpenID. Вот способ сделать это независимо от языка:

  • Сначала создайте таблицу БД, содержащую как минимум cookie_id и user_id столбцов. При необходимости также добавьте cookie_ttl и ip_lock . Думаю, названия столбцов говорят сами за себя.

  • При первом входе в систему (при необходимости только с установленной опцией «Запомнить меня») генерирует длинный, уникальный, трудно угадываемый ключ (который находится в никоим образом , относящийся к пользователю), который представляет cookie_id и сохраняет его в БД вместе с user_id . Сохраните cookie_id как значение cookie для файла cookie с известным именем, например помните . Дайте cookie долгий срок службы, например один год.

  • При каждом запросе проверять, вошел ли пользователь в систему.Если нет, то проверьте значение cookie cookie_id , связанное с именем cookie запомнить . Если он есть и действителен в соответствии с базой данных, то автоматически войдите в систему пользователя, связанного с user_id , и снова отложите срок хранения файлов cookie и, если есть, также cookie_ttl в базе данных.

В терминах Java / JSP / Servlet используйте HttpServletResponse # addCookie () для добавления cookie и HttpServletRequest # getCookies () для получения файлов cookie. Вы можете выполнить всю первоначальную проверку в фильтре , который прослушивает нужные ресурсы, например / * или может быть немного более ограниченным.

Что касается сессий, то здесь это вам не нужно. Его срок службы короче, чем вам нужно. Используйте его только для того, чтобы поместить вошедшего в систему пользователя или «найденного» пользователя, если у него есть действительный запомнить cookie. Таким образом, фильтр может просто проверять свое присутствие в сеансе, а затем не нужно проверять файлы cookie каждый раз.

В конце концов, все довольно просто. Удачи.

См. Также:

33
ответ дан 30 November 2019 в 11:22
поделиться

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

После более подробного изучения OpenID выяснилось, что есть нечто, называемое «Немедленный запрос» ( http://openid.net/specs/openid-authentication-2_0.html#anchor28 ).

При запросе аутентификации Проверяющая сторона МОЖЕТ запросить, чтобы OP не взаимодействовал с конечным пользователем. В этом случае OP ДОЛЖЕН немедленно ответить либо с утверждением, что аутентификация прошла успешно, либо с ответом, указывающим, что запрос не может быть выполнен без дальнейшего взаимодействия с пользователем.

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

Похоже, что OpenID предлагает сделать это в своем документе Relying Party Best Practices .

8
ответ дан 30 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: