Я работаю на сайте, где технически пользователи могут оставаться в системе навсегда, если они никогда не закрывают свой браузер (и, следовательно, никогда не получают новый ключ сеанса). Вот что я могу увидеть: пользователь оставляет браузер открытым на компьютере A. Затем используйте компьютер B, войдите в систему и измените его имя, которое хранится в сеансе. Они выходят из B, но A все еще входит в систему и сохраняет старое имя в сеансе. Поэтому их имя не будет обновляться до тех пор, пока они в следующий раз не выйдут вручную или не закроют свой браузер, не откроют его снова и не войдут в систему с помощью функции запомнить меня.
Имя - простой пример, но в моем случае уровень подписки их учетной записи сохраняется в сеансе и может быть изменен.
Как вы справляетесь с этим?
Вот несколько идей, которые у меня есть:
Через 10 или более минут данные сеанса перезагружаются. Это может быть ровно 10 минут, если пользователь очень активен, так как функция будет срабатывать прямо в 10-минутный момент, или это может быть через 2 часа, если пользователь уходит и возвращается, а затем вызывает функциональность.
Храните как можно меньше информации в сеансе и загружайте оставшуюся часть из БД при каждом вызове страницы. (Мне действительно не нравится эта идея.)
Использовать сеансы базы данных и использовать один и тот же сеанс на всех компьютерах. Мне это нравится, но я могу видеть, что это сбивает с толку, когда что-то вроде критериев поиска сохраняется в сеансе - одинаковые критерии будут отображаться в обоих браузерах / компьютерах.
Для информации, даже такой как имя пользователя или имя пользователя / адрес электронной почты, сохраните ее в сеансе, но для другой информации, которая может сильно повлиять на их возможности на сайте, не сохраняйте ее в сеансе и загрузить при необходимости (попытаться сделать это только один раз за экземпляр).
Есть ли другие лучшие методы?
-
Другой вариант: 5. Использовать сеанс базы данных и, когда выполняется обновление, загружать другие сеансы пользователя (просто десериализовать), изменять соответствующую информацию и сохранять их обратно в базу данных.