Comment implémenter la fonctionnalité « Se souvenir de moi » dans un système de connexion PHP pour une expérience utilisateur améliorée ?

Barbara Streisand
Libérer: 2024-11-10 00:06:02
original
637 Les gens l'ont consulté

How to Implement

Système de connexion PHP avec fonctionnalité « Remember Me » [Dupliquer]

Pour améliorer l'expérience utilisateur, vous pouvez implémenter un « Remember me » fonctionnalité dans votre système de connexion PHP, permettant aux utilisateurs de rester connectés sur plusieurs sessions.

Cookie sécurisé Stockage

La meilleure pratique pour stocker un cookie persistant consiste à utiliser une table distincte dans la base de données appelée auth_tokens :

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);
Copier après la connexion

Après la connexion

Lors de la connexion, générez des valeurs aléatoires uniques pour le sélecteur et jeton :

if ($login->success && $login->rememberMe) {
    $selector = base64_encode(random_bytes(9));
    $authenticator = random_bytes(33);

    setcookie(
        'remember',
        $selector . ':' . base64_encode($authenticator),
        time() + 864000, // 10 days
        '/',
        'yourdomain.com',
        true, // TLS-only
        true  // http-only
    );

    // Insert data into the database
    $database->exec(
        "INSERT INTO auth_tokens (selector, token, userid, expires) VALUES (?, ?, ?, ?)",
        [
            $selector,
            hash('sha256', $authenticator),
            $login->userId,
            date('Y-m-d\TH:i:s', time() + 864000)
        ]
    );
}
Copier après la connexion

Ré-authentification

if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) {
    list($selector, $authenticator) = explode(':', $_COOKIE['remember']);

    // Retrieve row from the database
    $row = $database->selectRow(
        "SELECT * FROM auth_tokens WHERE selector = ?",
        [
            $selector
        ]
    );

    // Verify hash and set session
    if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) {
        $_SESSION['userid'] = $row['userid'];
        // Regenerate a login token as per previous example
    }
}
Copier après la connexion

Détails

  • Le sélecteur fournit 36 ​​bits de résistance aux collisions, empêchant les attaques par force brute.
  • L'authentificateur offre une grande imprévisibilité avec 264 bits aléatoires.
  • Le hachage atténue les risques d'usurpation d'identité après des fuites potentielles d'informations.
  • Le hachage avec hash_equals() empêche les attaques temporelles.
  • La séparation du sélecteur et de l'authentificateur optimise les recherches dans la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal