Я новичок в cookie-файлах и (на самом деле, вообще-то, в PHP) и хочу внедрить систему "запомнить меня" для веб-сайта, над которым я работаю. Прочитав много постов здесь, а также на других сайтах, я понял, что не должен вводить пароль или любые другие данные пользователя в cookie. Одним из решений было использование remember_key
в таблице базы данных, которая обновляется каждый раз, когда пользователь регистрируется с установленным флажком «запомнить меня». И когда пользователь снова заходит на страницу, код должен выбрать remember_key
в БД и проверить, совпадает ли $_COOKIE['remember']
с remember_key
, если это так, то пользователь вошел в систему. Но я не уверен, как реализовать это. Я написал некоторый код так, как мне показалось, но я мог бы использовать некоторую помощь, чтобы проверить, правильно ли то, что у меня уже есть, и как поступить. Вот что у меня сейчас:
function rememberUser($id) {
$remember = md5(uniqid(mt_rand(),true));
$stmt = $mysqli->prepare("UPDATE USERS SET USER_REMEMBER_KEY = ? WHERE USER_ID = ?");
$stmt->bind_param('si', $remember, $id);
$stmt->execute();
setcookie("remember", $remember, time()+60*60*24*30, "/", "www.someName.com", false, true);
}
function isValidUser($id) {
$stmt = $mysqli->prepare("SELECT * FROM USERS WHERE USER_REMEMBER_KEY = ? AND USER_ID = ?");
$stmt->bind_param('si', $_COOKIE['remember'], $id);
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows;
if($count == 1) {
return true;
}
else {
return false;
}
}
function forgetUser($id) { // not sure about this method at all!
setcookie("remember", '', time()-3600, "/", "www.someName.com", false, true);
}
forgetUser()
удалит $_COOKIE['remember']
(или его значение?), Но как он узнает, что это cookie для этого конкретного человека? Я хотел бы получить любой комментарий / предложение / совет / подсказку или что-либо еще о коде, который у меня есть сейчас, и о том, как я могу его улучшить.
Для вашей информации, я уже знаю о сессиях, они просты в использовании и более безопасны (я полагаю), но мне нужно, чтобы пользователи входили в систему в течение более длительного времени (например, FB), а сессии не достаточно хороши для этого , Я также слышал, что длительное использование сессий не гарантирует их удаления.
О безопасности: мой сайт не должен быть супер-сверхбезопасным, я думаю, что этого токена будет достаточно?