Мне нравится способ с сохранением сессий в базе данных. После авторизации сгенерировать строку (ид) и сохранить в базе данных, и установить куки в браузере.
Получается, что в этом случае не нужно создавать сессию в PHP с помощью session_start()?
Получается, что при каждом запросе к серверу будет запрос в базу данных для поиска переданного ид из куки. Нормально так проектировать приложение или нет?
Я использую базу данных вместо сессий PHP, чтобы добавить функцию "запомнить меня" и чтобы сессии были в одном месте, возможность пользователю управлять сессиями (разлогинить на каких-то устройствах).
Похоже, Вы не совсем понимаете механизм сессий. Да, на стороне клиента хранится только id. Но на стороне сервера могут храниться произвольные данные, ассоциированные с этим id.
Получается, что в этом случае не нужно создавать сессию в PHP с помощью session_start()?
Если Вы собираетесь полностью заменять встроенный механизм сессий на свой, то не нужно. Но этот подход не кажется достаточно обоснованным; посмотрите сначала на https://www.php.net/manual/en/function.session-set...
на стороне сервера могут храниться произвольные данные, ассоциированные с этим id.
Я думаю создать отдельную таблицу в базе данных sessions, где будут поля session_id, user_id. При запросе из куки будет использоваться значение session_id и поиск в базе данных, чтобы найти user_id и потом найти данные пользователя в базе данных используя этот user_id. Это правильно?
Это называется "закат солнца вручную". Если весь сыр-бор вокруг "запомнить меня" и прочими разлогинами, то к самому механизму сессий это никакого отношения не имеет.
Более того, если вы реально доросли до того что стандартный механизм сессий вас чем-то не устраивает, то скорее всего вы уже пользуетесь каким-то фреймворком, а в современных фв практически везде используется обертка и интерфейс для обращения к сессии, так что сменить способ хранения сессионных данных на бд/редис/мемкеш/чета свое дело 15 минут.
А если вы все еще пишете свое решение с блэкджеком и сессиями в бд, то лучше используйте пока стандартный функционал.
Может это не относится к самому смыслу сессий, но функции "запомнить меня" и т.д всё равно нужны. И есть разные способы это сделать и один из способов сохранение сессий в базу данных.
Я хочу научиться правильно проектировать приложения без фреймворков, наверно, это стоило указать в вопросе. Обычные сессии PHP удаляются через время указанное в настройках. Можно увеличить, но тогда будет больше файлов. И сессии кажутся не такими гибкими, как способ с базой данных.
... функции "запомнить меня" и т.д ... И есть разные способы это сделать и один из способов сохранение сессий в базу данных.
Во всех способах по итогу это запись в бд, и ВООБЩЕ НИКАК НЕ ПРИВЯЗАНА к сессиям.
То что в базе хранятся какие-то ассоциативные кукам ключи, к сессии не относится. Сессия - способ связать данные и пользователя на протяжении заданного времени наиболее простым и защищенным способом, при том что связь выполняется в режиме запрос-ответ-дисконнект, а не перманентный коннект. Все. Остальное механизмы с этим никак не связанные и в данный функционал не попадают.
Сессия - способ связать данные и пользователя на протяжении заданного времени
Вы про то, что "механизм" сессии PHP и способ записи в базу данных не одно и тоже? Это понятно. Но смысл у них один "способ связать данные и пользователя на протяжении заданного времени".
Или способ с базой данных лучше называть "автоматическая авторизация"?