향상된 사용자 경험을 위해 PHP 로그인 시스템에서 'Remember Me' 기능을 구현하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-10 00:06:02
원래의
631명이 탐색했습니다.

How to Implement

"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
    }
}
로그인 후 복사

세부정보

  • 선택기는 36비트의 충돌 저항을 제공하여 무차별 대입을 방지합니다.
  • 인증자는 264비트 무작위성으로 충분한 예측 가능성을 제공합니다.
  • 해시는 잠재적인 정보 유출 후 명의 도용 위험을 완화합니다.
  • hash_equals()를 사용한 해싱은 타이밍 공격을 방지합니다.
  • 선택기와 인증기를 분리하여 데이터베이스 최적화 조회합니다.

위 내용은 향상된 사용자 경험을 위해 PHP 로그인 시스템에서 'Remember Me' 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿