Сессия в PHP - это практически те же ваши "куки + БД", только вместо БД используется файл сессии. Он будет свой для каждого пользователя.
Генерируется уникальный хэш (ID сессии), он садится пользователю в куки, а на сервере создаётся файл с именем == ID сессии. PHP все это делает сам.
В файле сессии (на сервере) хранятся все переменные, которые вы захотите. Когда поднимается сессия, PHP автоматически инициирует массив $_SESSION
с вашими переменными (Имя пользователя, IP пользователя, дата последнего логина, права пользователя и тп).
Под работу с сессиями в PHP есть встроенные функции, они не все работают очевидным образом, но разобраться можно.
PS: Если не поддерживаются куки, то ID сессии может передаваться как параметр в URL.
есть ли возможность в случае с сессиями сохранить пользователя к примеру на месяц?
Да. Ставите у сессионной куки время жизни 1 месяц, и через месяц браузер пользователя автоматически её уничтожит. После этого надо будет авторизоваться заново.
Но на сервере есть параметр настроек PHP
session.gc_maxlifetime, который задает время жизни PHP-сессии на сервере. После истечения
session.gc_maxlifetime PHP garbage collection удаляет файл сессии на сервере. То есть, его надо ставить > месяца.
какой вариант предпочтительнее
вопрос холливарный. Если есть надо мониторить пользователей (кто, когда и зашёл и что сделал) - по БД это удобнее, чем рыться руками по тысяче файлов.
В плане безопасности - одинаково, тк работает один и тот же механизм. Угон куков -> подмена сессии.
PS: На хабре есть неплохая статья
Подводные камни использования сессий в PHP.