Возможный дубликат:
Каков наилучший способ реализовать «запомнить меня» для веб-сайта?
Каждый пользователь имеет уникальный 32 символа id (сделанный следующим образом: md5("salt" . $username . $user_password . "salt2");
). И я храню это значение в поле «unique_id» в пользователях таблицы. Является ли это хорошим способом присвоить это значение cookie пользователя и позволить ему войти в систему, только если он назначен? И, конечно, проверьте, существует ли это значение в базе данных?
Я не думаю, что это хорошая практика, потому что если кто-то украдет ваш файл cookie, они смогут войти в вашу учетную запись.
Какое другое / лучшее решение? Конечно, самая безопасная вещь, вероятно, состоит в том, чтобы хранить ее в сеансах, но я хочу реализовать эту функцию.
Благодарю.
Скажем, имя таблицы базы данных для постоянного файла cookie – это pcookies со следующими столбцами:
- cookie_id (CHAR)
- user_id (INT)
- истечение срока действия (DATETIME)
- соль (CHAR)
Шаги создания файлов cookie:
- После успешного входа в систему создайте запись cookie в базе данных под уникальным идентификатором. Вы можете сгенерировать его с помощью hash_hmac ('sha512', $ token, $ salt), где $ token = uniqid ($ user_id, TRUE) и $ salt = md5 (mt_rand ()).
- Храните «идентификатор пользователя», «время истечения» и «соль» вместе с «идентификатором файла cookie» в базе данных.
- Храните «cookie id» и «токен» в cookie.
Шаги аутентификации:
- Если найден постоянный файл cookie, сначала проверьте, доступна ли запись в базе данных или нет.
- Если запись доступна, проверьте, истекает ли файл cookie или нет.
- Если cookie не истекает, проверьте идентификатор файла cookie на $ cookie_id == hash_hmac ('sha512', $ token_from_cookie, $ salt_from_db).
- Как только cookie будет проверен, удалите его из базы данных и создайте новый файл cookie в соответствии с вышеуказанными шагами создания файлов cookie.
- Если файл cookie найден как недопустимый, очистите файл cookie с устройства и удалите все остальные файлы cookie пользователя из базы данных, обратите внимание на использование попытки кражи и перейдите к процедуре ручного входа в систему.
Заметки:
- Когда сеанс доступен, игнорируйте проверку файлов cookie.
- После выхода из системы очистите файл cookie вместе с записью базы данных.
- Никогда не разрешайте пользователям выполнять конфиденциальные запросы, такие как смена пароля, или просматривать информацию о кредитной карте из постоянного входа в файл cookie. Вызовите пароль для входа и добавьте флаг в сеанс, чтобы разрешить все операции.
Эти две должности обеспечивают отличные рекомендации по внедрению постоянных файлов для входа в систему:
(Прочитайте их в указанном порядке, так как второй улучшает первый).