Установите файл cookie после проверки пароля:
if(password_verify($password, $hashed_password)) {
// Password is correct, so start a new session
session_start();
// store user data in cookie
setcookie('user', json_encode([
'username' => $username,
'password' => $password
]), time() + 3600 * 24 * 30);
Затем, прежде чем проверять переменную loggedin
в сеансе, проверьте наличие файла cookie (обратите внимание внимательно на закомментированные строки здесь):
// Check if there is an already logged in user in the cookie and then set its data to the session
if(isset($_COOKIE['user']) && !isset($_SESSION["loggedin"])) {
$user = json_decode($_COOKIE['user'], true);
// do the stuff to check if there is a user with $user['username'] and $user['password'] in the database, then if there is one, do as below :
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $userId; // retrieved from database
$_SESSION["username"] = $user['username'];
// else if there is no user with that credentials from cookie, do the following to prevent further checking on database :
$_SESSION["loggedin"] = false;
}
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
Чтобы уничтожить куки при выходе пользователя из системы, используйте unset
, как уже @DakshMehta сказал об этом:
unset($_COOKIE['user']);
осторожно : Не рекомендуется хранить пароль пользователя в файле cookie из-за проблем безопасности.Поэтому, возможно, вы хотите реализовать аутентификацию на основе токенов, которая обновляет токен через короткий промежуток времени или, по крайней мере, при каждом входе в систему.Использование json web tokens (jwt) может быть полезным в этой теме, и есть этот пакет, который реализует jwt в php: firebase / php-jwt Вы должны знать, что токен действует точно так же, как пароль, поэтомукогда вы сохраняете его в файле cookie, вы должны учитывать некоторые советы по безопасности, которые упомянуты здесь в последнем разделе этой статьи: Где хранить ваши JWT - файлы cookie против веб-хранилища HTML5