Доброго времени суток!
Подскажите, пожалуйста, как в настоящий момент реализуется авторизация и аутентификация пользователей в приложении на PHP?
В приложении будет 2 типа пользователей:
1. Администратор
2. Пользователь
С администратором, все более менее понятно. Для администраторов будет отдельная таблица в БД, с логином и паролем (через password_hash). Также,будет отдельная форма авторизации. Ввел логин и пароль, записали в $_SESSION. Закрыл браузер - сессии удалились. При повторном входе - новая авторизация.
А вот как быть с пользователями? Задача стоит оставлять пользователей авторизованными как минимум на 6 месяцев. Другой реализации, кроме как через $_COOKIES, я не вижу (могу и ошибаться).
Сейчас реализовано так (не мной, я так понял заказчик сам это сделал, хотя сослался на другого фрилансера): при авторизации через форму, проверяется корректность пароля в БД (через password_verify) и в куки записывается его логин. При входе на закрытые страницы, проверяется наличие логина в куках, если он есть - делается запрос в БД на проверку наличия этого логина и выводится вся информация о пользователе по этому логину.
Как я сейчас вижу решение:
1. Создать в таблице пользователей столбец salt (уникальная строка, которая будет генерироваться при регистрации).
2. В куки записывать хэш, который генерируется через password_hash из столбца salt, а также id пользователя.
3. При входе на закрытые страницы, делать запрос в БД на получение поля salt по id из куки.
4. Сгенерировать новый хэш через password_hash и полученным полем salt из БД и проверить его с хэшем в куках.
Если сделать так, то такая проверка на каждой закрытой странице - нагнет сервер.
Думаю сделать еще так: если хэши совпали на пункте 4, создать сессию авторизации ($_SESSION['auth']) и делать проверки на ее наличие на всех закрытых страницах. Если пользователь закроет браузер - сессия удалится, а кука останется. При повторном входе будет только один запрос в БД, который проверит куку и salt и создаст новую сессию.
Вот написал этот текст, перечитал, вроде все ок, но что-то смущает. Пожалуйста, подскажите, как это правильно реализуется сейчас? C php-фреймворками не работал, посмотрел классы авторизации на github, но они все реализованы на сессиях (
например), а мне нужно долго хранить пользователя без разлогинивания. Или я что-то не правильно понимаю?
Заранее спасибо за помощь!