Постоянный вход PHP – регенерация имени входа

Я пытаюсь реализовать постоянное решение для входа в систему для защиты некоторых страниц администратора на веб-сайте, над которым я работаю, используя этот ответ SO в качестве основы:

Система входа в систему PHP: Запомнить меня (постоянный файл cookie)

После входа в систему

if ($login->success && $login->rememberMe) { // However you implement it $selector = base64_encode(openssl_random_pseudo_bytes(9)); $authenticator = openssl_random_pseudo_bytes(33); setcookie( 'remember', $selector.':'.base64_encode($authenticator), time() + 864000, '/', 'yourdomain.com', true, // TLS-only true // http-only ); $database->exec( "INSERT INTO auth_tokens (selector, token, userid, expires) VALUES (?, ?, ?, ?)", [ $selector, hash('sha256', $authenticator), $login->userId, date('Ymd\TH:i:s', time() + 864000) ] ); } 

Повторная аутентификация на странице загрузки

 if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) { list($selector, $authenticator) = explode(':', $_COOKIE['remember']); $row = $database->selectRow( "SELECT * FROM auth_tokens WHERE selector = ?", [ $selector ] ); if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) { $_SESSION['userid'] = $row['userid']; // Then regenerate login token as above } } 

Мой вопрос в том, что я не понимаю, что имеется в виду в этом разделе в разделе «Повторная проверка подлинности на странице»:

 // Then regenerate login token as above 

Это токен входа, о котором идет речь, – означает ли это этот бит:

 $selector = base64_encode(openssl_random_pseudo_bytes(9)); 

Или этот бит:

 $authenticator = openssl_random_pseudo_bytes(33); 

И как только я это сделал, мне нужно:

  1. Добавьте еще одну строку в таблицу «auth_tokens»
  2. Восстановить файл cookie, чтобы добавить новое значение токена?

Я пробовал различные варианты постоянных логинов всю неделю, и это почти привело меня туда, но я спотыкаюсь на этот последний блок.

Related of "Постоянный вход PHP – регенерация имени входа"

Когда вы входите в систему в первый раз, если вы установите флажок «запомнить меня», произойдут две вещи:

  1. Их текущий сеанс HTTP будет обновляться с любой информацией, необходимой для привязки сессии к активной учетной записи пользователя.
  2. Куки-файлы будут помещены на компьютер пользователя, содержащий маркер долгосрочной аутентификации.

Маркер состоит из selector:verifier в виде конкатенированной строки.

В следующий раз, когда ваш пользователь придет на ваш сайт, если у них нет активного сеанса, cookie будет использоваться для автоматического входа в систему в качестве связанного пользователя. Затем этот токен должен быть отброшен с обеих сторон (браузер и база данных), а новый должен быть сгенерирован, чтобы занять его место.

Конечный результат: для конечных пользователей это похоже на то, что они вошли в систему навсегда (пока они явно не выходят из системы, что должно привести к недействительности токенов).