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

12
Sanu0074
На сайте с 31.08.2012
Offline
110
995

Такая ситуация, юзер авторизовывается на сайте, в сессию записываются его некоторые данные, в куки хэш и id.

Если время жизни сессии истекло, или она умерла, проверяются куки, если там есть хэш и id то извлекаются данные и вновь записываются в сессию.

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

Вопрос в том, как обновить сессию юзеру, при изменении какихто данных в бд? (постоянно делать запросы к бд, тупо извлекать данные пользователя при каждом обновлении страницы не вариант, нужно более умное решение)

siv1987
На сайте с 02.04.2009
Offline
427
#1

Установить поле при изменении каких-то данных в бд - need rebuild session

Sanu0074:
(постоянно делать запросы к бд, тупо извлекать данные пользователя при каждом обновлении страницы не вариант, нужно более умное решение)

Статическая таблица (при желании memory), удаление по времени. Не вижу проблемы. Умными решениями костылями окажетесь в ситуации, когда весь этот костыль будет все сложнее поддерживать и масштабировать.

Sanu0074
На сайте с 31.08.2012
Offline
110
#2

siv1987, в смысле при каждом обновлении делать запрос типа:

select count(*) from users whre id=U_ID AND need_rebuild_session=1

Смысл хранения данных в сессии именно чтоб избавиться от этих лишних запросов, а это ж получается надо при каждом обновлении делать такой запрос на проверку... Или это единственный вариант?

LEOnidUKG
На сайте с 25.11.2006
Online
1723
#3

Не хотите mysql сделайте файлик, где будут записаны ID юзеров которым надо перезайти.

Или храните в БД ID сессии и когда надо принудительно убивайте.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Sanu0074
На сайте с 31.08.2012
Offline
110
#4

LEOnidUKG, что будет быстрее работать, select count или проверка файла?

LEOnidUKG
На сайте с 25.11.2006
Online
1723
#5
Sanu0074:
LEOnidUKG, что будет быстрее работать, select count или проверка файла?

По сути проверка файла. Можно даже сделать папку, где хранить файлы с названием ID клиентов и проверять file_exists

Ну или как писали выше таблицу MEMORY, на диске ничего не будет храниться. Всё в памяти.

siv1987
На сайте с 02.04.2009
Offline
427
#6
Sanu0074:
в смысле при каждом обновлении делать запрос типа:

При каждом обновлении данных (имени, прочая ебала которая в сессии) делайте запрос в таблице которая загружается у пользователя. Или у вас вообще нет запросов в бд? Тогда городите костыли.

Sanu0074
На сайте с 31.08.2012
Offline
110
#7

siv1987, я понял, так и есть

siv1987
На сайте с 02.04.2009
Offline
427
#8

Ну еще как вариант из "умных решений", сохранять сессии в папке доступной для чтения и записи из php. В бд хранить идентификатор сессии и при изменения данных в бд синхронизировать на основе идентификатора с файлами сессий.

Sanu0074
На сайте с 31.08.2012
Offline
110
#9

siv1987, т.е. удалять файл сессии при изменении информации, так я понимаю?

siv1987
На сайте с 02.04.2009
Offline
427
#10

А вариант изменять не рассматривается? Ну если вам легче удалять и стартовать новую сессию то можете и так.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий