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

395
18 июня 2022, 16:10

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

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

Answer 1
 $token = bin2hex(openssl_random_pseudo_bytes(10));

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

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

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

Answer 2

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

Answer 3

Вообще-то практика вечного авто-логина не очень хорошая идея. Достаточно представить, что пользователь Вашего сайта будет заходить из какого-нибудь Интернет-кафе или с чужого компьютера и забудет сделать 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, чтобы избежать вечного авто-логина.

READ ALSO
Получить передаваемое имя параметра

Получить передаваемое имя параметра

хочу реализовать метод, проверяющий переданный параметр на nullВ случае, если параметр равен null, то кидаю исключение

157
Как получить доступ к MeshTextPro в unity 2d?

Как получить доступ к MeshTextPro в unity 2d?

в 2d игре на unity пишет такую ошибку при попытке подключения к TextMeshPro через c# код TextMeshPro в UI unity 2020

233
Использование Google Maps в Xamarin

Использование Google Maps в Xamarin

Хотелось бы узнать, можно ли использовать API Google Карт для отображения конкретных ближайших магазинов на карте? Вкратце: есть мобильное приложение...

170