Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man die „Remember Me'-Funktionalität in einem PHP-Anmeldesystem für eine verbesserte Benutzererfahrung?

Wie implementiert man die „Remember Me'-Funktionalität in einem PHP-Anmeldesystem für eine verbesserte Benutzererfahrung?

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 00:06:02639Durchsuche

How to Implement

PHP-Anmeldesystem mit „Remember Me“-Funktionalität [Duplikat]

Um das Benutzererlebnis zu verbessern, können Sie eine „Remember Me“-Funktion implementieren. Funktion in Ihrem PHP-Anmeldesystem, die es Benutzern ermöglicht, über mehrere Sitzungen hinweg angemeldet zu bleiben.

Sicheres Cookie Speicherung

Die beste Vorgehensweise zum Speichern eines dauerhaften Cookies ist die Verwendung einer separaten Tabelle in der Datenbank namens 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`)
);

Nach der Anmeldung

Generieren Sie beim Anmelden eindeutige Zufallswerte für Selektor und Token:

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)
        ]
    );
}

Neuauthentifizierung

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
    }
}

Details

  • Der Selektor stellt 36 Bit zur Verfügung von Kollisionsresistenz, wodurch Brute-Force-Angriffe verhindert werden.
  • Der Authentifikator bietet reichlich Unvorhersehbarkeit mit 264 Bit Zufälligkeit.
  • Der Hash mindert das Risiko von Identitätsdiebstahl nach potenziellen Informationslecks.
  • Hashing mit hash_equals() verhindert Timing-Angriffe.
  • Die Trennung von Selektor und Authentifikator optimiert die Datenbank Nachschlagen.

Das obige ist der detaillierte Inhalt vonWie implementiert man die „Remember Me'-Funktionalität in einem PHP-Anmeldesystem für eine verbesserte Benutzererfahrung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn