"Remember Me" 기능을 갖춘 PHP 로그인 시스템 [중복]
사용자 경험을 향상시키기 위해 "remember me"를 구현할 수 있습니다 PHP 로그인 시스템의 기능을 사용하면 사용자가 여러 사이트에서 로그인 상태를 유지할 수 있습니다. 세션.
보안 쿠키 저장소
영구 쿠키를 저장하는 가장 좋은 방법은 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`) );
로그인 후
로그인 시 고유 생성 선택기와 토큰의 임의 값:
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) ] ); }
재인증
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 } }
세부정보
위 내용은 향상된 사용자 경험을 위해 PHP 로그인 시스템에서 'Remember Me' 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!