Как создать защищенную систему "помни меня" с помощью PHP?

У меня есть система входа. Как я могу реализовать безопасную систему помнить меня с помощью файлов cookie.

Какое значение следует хранить в имени пользователя и пароле cookie, но как я могу его защитить?

Ответ 1

определите пользователя Salt foreach в db, затем

при настройке

$expire_time = time() + 2 * 7 * 24 * 3600; // 2 weeks exp time

setcookie( 
    "rememberMe",
    crypt($username, $salt),
    $expire_time,
    '/'
);

при проверке

$_COOKIE['rememberMe'] === crypt($username, $salt)

Ответ 2

Возможно, вы могли бы создать буквенную/цифровую строку 16 char, связанную в базе данных с этим пользователем и адресом mac, чтобы (пока люди не пытались слишком усердно и подделывать маки), только эта машина может войдите в систему.

Ответ 3

Возможно, вам следует хранить (в вашем DB) посетителя IP, User Agent, часовой пояс или установленные плагины. Что-то, что может быть легко получить с помощью Javascript, поскольку получение MAC-адреса может быть проблемой.

Затем вы можете легко проверить, есть ли у пользователя одинаковые IP, UA, часовые пояса или плагины в последний раз:) Или вы можете использовать MaxMind, чтобы проверить его местоположение и подтвердить, использует ли он правильный часовой пояс. Если есть что-то подозрительное, вы должны отказаться от учетных данных cookie.

Ответ 4

Там не так много... не позволяйте очищать файлы сеанса (ini setting session.gc_probability = 0) и изменять cookie сеанса от временного до постоянного (ini setting session.cookie_lifetime = however_long_you_want_the_user_to_be_remembered).

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