Как реализовать функцию помнить меня?

Возможный дубликат:
Каков наилучший способ реализовать «запомнить меня» для веб-сайта?

Каждый пользователь имеет уникальный 32 символа id (сделанный следующим образом: md5("salt" . $username . $user_password . "salt2"); ). И я храню это значение в поле «unique_id» в пользователях таблицы. Является ли это хорошим способом присвоить это значение cookie пользователя и позволить ему войти в систему, только если он назначен? И, конечно, проверьте, существует ли это значение в базе данных?

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

Какое другое / лучшее решение? Конечно, самая безопасная вещь, вероятно, состоит в том, чтобы хранить ее в сеансах, но я хочу реализовать эту функцию.

Благодарю.

Скажем, имя таблицы базы данных для постоянного файла cookie – это pcookies со следующими столбцами:

  • cookie_id (CHAR)
  • user_id (INT)
  • истечение срока действия (DATETIME)
  • соль (CHAR)

Шаги создания файлов cookie:

  1. После успешного входа в систему создайте запись cookie в базе данных под уникальным идентификатором. Вы можете сгенерировать его с помощью hash_hmac ('sha512', $ token, $ salt), где $ token = uniqid ($ user_id, TRUE) и $ salt = md5 (mt_rand ()).
  2. Храните «идентификатор пользователя», «время истечения» и «соль» вместе с «идентификатором файла cookie» в базе данных.
  3. Храните «cookie id» и «токен» в cookie.

Шаги аутентификации:

  1. Если найден постоянный файл cookie, сначала проверьте, доступна ли запись в базе данных или нет.
  2. Если запись доступна, проверьте, истекает ли файл cookie или нет.
  3. Если cookie не истекает, проверьте идентификатор файла cookie на $ cookie_id == hash_hmac ('sha512', $ token_from_cookie, $ salt_from_db).
  4. Как только cookie будет проверен, удалите его из базы данных и создайте новый файл cookie в соответствии с вышеуказанными шагами создания файлов cookie.
  5. Если файл cookie найден как недопустимый, очистите файл cookie с устройства и удалите все остальные файлы cookie пользователя из базы данных, обратите внимание на использование попытки кражи и перейдите к процедуре ручного входа в систему.

Заметки:

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

Эти две должности обеспечивают отличные рекомендации по внедрению постоянных файлов для входа в систему:

(Прочитайте их в указанном порядке, так как второй улучшает первый).