Заход на сайт с сохраненным аккаунтом
Прочитал https://htmlweb.ru/php/example/avtorizacija2.php, но не понял как сделать так чтобы при входе на сайт автоматически отображался аккаунт пользователя, если пользователь не вышел из него в прошлый раз посещения сайта (ну к примеру как тут на stackoverflow
Чтобы при каждом посещении сайта пользователь был авторизован, если он до этого не выходил с аккаунта.
Ответы (3 шт):
$token = bin2hex(openssl_random_pseudo_bytes(10));
полученный таким образом токен сохраняем в куку и в БД.
при заходе на сайт, если нет авторизации, но есть кука с таким значением, то найти ее в бд, и авторизовать пользователя. если куки нет или значение не найдено, то показать форму авторизации
после использования токена поменять на новый
Механизм со стороны фронтенда очень прост. После регистрации или входа в бэка приходит token. Его мы кидаем в localStorage(localStorage.setItem('token', token)). При выходе пользователя мы удаляем(localStorage.removeItem('token')). При входе мы смотрим есть этот токен(localStorage.getItem('token')). Если он есть, то авторизируем пользователя, если нет, то кидаем на страницу авторизации.
Вообще-то практика вечного авто-логина не очень хорошая идея. Достаточно представить, что пользователь Вашего сайта будет заходить из какого-нибудь Интернет-кафе или с чужого компьютера и забудет сделать logout... Но, условия задачи ставите Вы - Вам и все риски в руки :)
Итак, мой алгоритм:
- Авторизуем пользователя через логин и пароль.
- При успешной авторизации выдаем пользователю
session_id(уникальный ID его сессии он же токен) - генерируете его по своему усмотрению каким угодно алгоритмом. Напримерmd5(time()+<user_id>). Так же генерируем пользователю уникальный<cookie_id> - Сохраняем
<session_id>и<cookie_id>в БД. Также<session_id>сохраняем в$_SESSION, а<cookie_id>в браузер. Для выполнения условий задачи выставляем для<cookie_id>неограниченное время жизни. - При любом обращении к сайту проверяем есть ли значение переменной
<session_id>в$_SESSION, если есть проверяем что пользователь с таким<session_id>в БД существует. - Если
<session_id>в$_SESSIONнет - значит истекло ее время жизни установленное вphp.ini - Если время истекло обращаемся к
$_COOKIEи смотрим есть ли там<cookie_id>, проверяем, что есть пользователь в БД с таким<cookie_id>. - Если в п.6 все успешно - заново выполняем п.2 и п.3 и далее по алгоритму.
У меня так сделано на большом кол-ве живых проектов. Только у меня еще ограничено время жизни cookie_id, чтобы избежать вечного авто-логина.
