Так что вы хотите «Запомнить меня на этом компьютере» вариант? Вот язык-агностик способ, как вы можете это сделать:
- Создать таблицу БД, по крайней мере,
cookie_id
и user_id
колонн. При необходимости также добавьте cookie_ttl
и ip_lock
. Названия столбцов говорят сами за себя, я думаю.
- При первом входе в систему (если необходимо, только с опцией «Запомнить меня»), создайте длинный, уникальный, труднодоступный ключ, который представляет
cookie_id
и сохранит его в БД вместе с user_id
. Также сохраните это как значение cookie cookie с указанным именем cookie. Например. remember
. Дайте печенью долгий срок службы, например. один год.
- При каждом запросе проверьте, вошел ли пользователь в систему. Если нет, проверьте значение cookie
cookie_id
, связанное с именем файла cookie remember
. Если он есть, и он действителен в соответствии с БД, затем автоматически войдите в систему пользователя, связанного с user_id
, и снова отложите возраст печенья.
Что касается рисков безопасности, если ключ длинный и достаточно смешанный (по меньшей мере, 30 смешанных символов), то шансы на грубый ввод логина незначительны. Далее вы, вероятно, уже поняли, для чего должен использоваться дополнительный столбец ip_lock
. Он должен представлять IP-адрес пользователя. В конечном итоге вы можете добавить дополнительный флажок «Заблокировать вход в этот IP-адрес (только если у вас есть статический IP-адрес)», чтобы сервер мог использовать IP-адрес пользователя в качестве дополнительной проверки.
А что, если один убьет значение cookie от пользователя без блокировки IP? Что ж, против этого не так много. Живи с этим. «Помни меня» - это забавно для всех форумов, и уловки аккаунтов не повредили бы там, но я бы, конечно же, не использовал его для панелей администратора и таких веб-страниц, которые управляют серверными вещами.
Это ведь довольно прямолинейно. Удачи.
Могут ли те, кто отвечает на вопрос, также созерцать вопросы безопасности по этой теме? Например, как предотвратить автоматический вход в систему путем копирования файла cookie. Благодарю. –
Затем, по крайней мере, упоминайте об угрозе безопасности при использовании сеансов;) – Franz
Вы должны повторно использовать существующую систему проверки подлинности, когда это возможно, потому что, действительно, она сложна. Например, посмотрите https://github.com/delight-im/PHP-Auth – caw