Заход на сайт с сохраненным аккаунтом

Прочитал https://htmlweb.ru/php/example/avtorizacija2.php, но не понял как сделать так чтобы при входе на сайт автоматически отображался аккаунт пользователя, если пользователь не вышел из него в прошлый раз посещения сайта (ну к примеру как тут на stackoverflow

введите сюда описание изображения

Чтобы при каждом посещении сайта пользователь был авторизован, если он до этого не выходил с аккаунта.


Ответы (3 шт):

Автор решения: Ипатьев
 $token = bin2hex(openssl_random_pseudo_bytes(10));

полученный таким образом токен сохраняем в куку и в БД.

при заходе на сайт, если нет авторизации, но есть кука с таким значением, то найти ее в бд, и авторизовать пользователя. если куки нет или значение не найдено, то показать форму авторизации

после использования токена поменять на новый

→ Ссылка
Автор решения: Arkadii

Механизм со стороны фронтенда очень прост. После регистрации или входа в бэка приходит token. Его мы кидаем в localStorage(localStorage.setItem('token', token)). При выходе пользователя мы удаляем(localStorage.removeItem('token')). При входе мы смотрим есть этот токен(localStorage.getItem('token')). Если он есть, то авторизируем пользователя, если нет, то кидаем на страницу авторизации.

→ Ссылка
Автор решения: cy4oHok

Вообще-то практика вечного авто-логина не очень хорошая идея. Достаточно представить, что пользователь Вашего сайта будет заходить из какого-нибудь Интернет-кафе или с чужого компьютера и забудет сделать logout... Но, условия задачи ставите Вы - Вам и все риски в руки :)

Итак, мой алгоритм:

  1. Авторизуем пользователя через логин и пароль.
  2. При успешной авторизации выдаем пользователю session_id(уникальный ID его сессии он же токен) - генерируете его по своему усмотрению каким угодно алгоритмом. Например md5(time()+<user_id>). Так же генерируем пользователю уникальный <cookie_id>
  3. Сохраняем <session_id> и <cookie_id> в БД. Также <session_id> сохраняем в $_SESSION, а <cookie_id> в браузер. Для выполнения условий задачи выставляем для <cookie_id> неограниченное время жизни.
  4. При любом обращении к сайту проверяем есть ли значение переменной <session_id> в $_SESSION, если есть проверяем что пользователь с таким <session_id> в БД существует.
  5. Если <session_id> в $_SESSION нет - значит истекло ее время жизни установленное в php.ini
  6. Если время истекло обращаемся к $_COOKIE и смотрим есть ли там <cookie_id>, проверяем, что есть пользователь в БД с таким <cookie_id>.
  7. Если в п.6 все успешно - заново выполняем п.2 и п.3 и далее по алгоритму.

У меня так сделано на большом кол-ве живых проектов. Только у меня еще ограничено время жизни cookie_id, чтобы избежать вечного авто-логина.

→ Ссылка