Сброс сессии по изменению данных в бд

sanu0074

Новичок
Такая ситуация, юзер авторизовывается на сайте, в сессию записываются его некоторые данные, в куки хэш и id.
Если время жизни сессии истекло, или она умерла, проверяются куки, если там есть хэш и id то извлекаются данные и вновь записываются в сессию.
Но, может быть такой случай, например в сессии хранится фамилия юзера и она гдето на странице отображается, например админ изменил эту фамилию и получается в бд уже новые данные а пользователь видит только те что у него в сессии, новые увидит только в том случае когда обновятся данные в сессии (т.е. надо либо перезайти в акк, либо дождаться смерти сессии).
Вопрос в том, как обновить сессию юзеру, при изменении какихто данных в бд? (постоянно делать запросы к бд, тупо извлекать данные пользователя при каждом обновлении страницы не вариант, нужно более умное решение)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
sanu0074, надо при обновлении данных в бд обновить их и в сессии, нет?
 

scorpion-ds

Новичок
тупо извлекать данные пользователя при каждом обновлении страницы не вариант, нужно более умное решение)
Почему это тупо? Ты же не хранишь "персонализированный кеш" для пользователей.

Ты все равно по иди должен сверять с БД подлинность авторизации, вот в этот момент и получай данные о пользователе.
 

AnrDaemon

Продвинутый новичок
Надо при изменении данных, которые могут храниться в сессии, убивать сессию. Тогда при следующем обращении сессия будет создана заново с валидными данными.
Этот процесс называется "инвалидация кеша" и тривиально гуглится по этому словосочетанию.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
AnrDaemon, надо при изменении данных, которые могут храниться в сессии, не хранить их в сессии потому что сессия - это не кеш и не надо ее инвалидировать :)
 

AnrDaemon

Продвинутый новичок
Зависит от частоты изменения данных. Какие-то постоянно меняются и хранить их в сессии бессмысленно.
А какие-то МОГУТ ТЕОРЕТИЧЕСКИ измениться, но нормально это случается раз в год. Предусмотреть возможность их изменения нужно, но реально она использоваться будет опять таки раз в год.
 
Последнее редактирование:

MiksIr

miksir@home:~$
AnrDaemon, вам как бэ намекают, что если вы хотите записать в сессию какие-то данные, которые являются функцией от данных из базы данных - это вообще впринципе неверное архитектурное решение. Ну совершенно без оглядки на частоту изменения. Ибо это уже будет кеширование, а сессия для кеширования банально неэффективна.

Назначение сессии - эмуляция персистентности http сессии посетителя. Соответвенно там должны быть данные, которые явились функцией предыдущего http запроса этого человека, но при этом не критичны и не живут долго, что бы писать их в базу данных.

Как-то так...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
MiksIr, ему как-бы намекают, что хватит советовать глупости. На этом форуме дают правильные, обоснованные советы люди, которые понимают в том, что пишут, а чушь - вредна, и здесь ей не место.
Сессия - это не кеш и не storage. Относятся данные к сессии или нет не зависит от частоты их изменений.

Сессия - это сеанс, это связь между запросами пользователя к серверу. Если информация относится к текущему сеансу и не относится к другим его сеансам - это сессия.
комбинация session_id/user_id - это сессия, нужно знать чья она,
имя пользователя - не сессия, оно сохраняется между сессиями,
значение капчи - сессия, матрица прав доступа - нет, и т.д.
 
Сверху