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