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