Ответ 1
Итак, вы действительно хотите, как вариант "Запомнить меня на этом компьютере"? Это фактически не связано с частью OpenID. Здесь язык-агностический способ, как вы можете это сделать:
-
Сначала создайте таблицу БД с столбцами не менее
cookie_id
иuser_id
. При необходимости также добавьтеcookie_ttl
иip_lock
. Названия столбцов говорят сами за себя, я думаю. -
При первом входе в систему (если необходимо только с опцией "Запомнить меня" ), сгенерируйте длинный, уникальный, труднодоступный ключ (что никоим образом связанный с пользователем), который представляет
cookie_id
и сохраняет это в БД вместе сuser_id
. Хранитеcookie_id
в качестве значения cookie cookie с известным именем cookie, например.remember
. Дайте печенью долгий срок службы, например. один год. -
В каждом запросе проверьте, вошел ли пользователь в систему. Если нет, проверьте значение cookie
cookie_id
, связанное с именем файла cookieremember
. Если он есть, и он действителен в соответствии с БД, затем автоматически войдите в систему пользователя, связанного сuser_id
, и отложите возраст печенья снова, а если есть, такжеcookie_ttl
в БД.
В условиях Java/JSP/Servlet используйте HttpServletResponse#addCookie()
, чтобы добавить файл cookie и HttpServletRequest#getCookies()
для получения файлов cookie. Вы можете выполнить все первые проверки в Filter
, который прослушивает нужные ресурсы, например. /*
или, возможно, немного более ограниченный.
Что касается сессий, вам здесь это не нужно. Он имеет более короткий срок службы, чем вам нужно. Используйте его только для ввода зарегистрированного пользователя или "найденного" пользователя, когда он имеет действительный файл cookie remember
. Таким образом, Filter
может просто проверить свое присутствие в сеансе, а затем не нужно проверять файлы cookie каждый раз.
Это ведь довольно прямо. Удачи.