Админ изменил профиль юзера, как обновить сессию?

12
A
На сайте с 06.11.2010
Offline
128
1104

Юзер зашёл на сайт, ввёл логин/пароль, получил сессию в которой есть array('employeeId', 'companyId','firstName', 'lastName', 'sex', 'lang', 'email', 'role')

Админ тоже зашёл на сайт и изменил у этого сотрудника lastName.

Какбы у сотрудника теперь должен быть измененные lastName, но он изменится только после повторного входа на сайт.. а как можно изменить сразу? Постоянно проверять нету ли каких-нибудь изменений.. и если есть, то обновлять сессию пользователя?

B
На сайте с 11.12.2009
Offline
116
#1

если сессии хранятся в бд, добавь колонку changed

A
На сайте с 06.11.2010
Offline
128
#2

нет, в бд не хранятся, походу в файлах на сервере.. так как использую стандартную функцию php

B
На сайте с 11.12.2009
Offline
116
#3

тогда вы сами ответили на свой вопрос.

S
На сайте с 21.01.2013
Offline
20
#4

В сессии хранить только идентификатор пользователя, все данные брать из кэша, кэш инвалидировать при изменении данных пользователя. Кэш желательно размещать в памяти.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#5
SOmni:
В сессии хранить только идентификатор пользователя, все данные брать из кэша, кэш инвалидировать при изменении данных пользователя. Кэш желательно размещать в памяти.

Админ че сутки напролет собирается изменять данные юзеров когда они активны?

Как по мне достаточно в сессии хранить АйДишник юзверя и каждый раз(при открытии новой страницы) по нему дергать БД.

Я не сторонник всякой псевдо-экономики, где девелоперы выкраивают каждый байт трафика/памяти. ДА согласен что есть случае где это выкраивание необходимо, но думаю в данном случае 1 СЕЛЕКТ ФРОМ `юзерс` WHERE `id`=$_SESSION['user_id'] ни че не решит в плане умирания БД. Если еще и на АйДи будет стоять индекс, то ваще красота:)

Подпись))
A
На сайте с 06.11.2010
Offline
128
#6

Милованов Ю.С, что-то не понял про айдишку..)

айдишка не изменяется, или предлагаете брать данные по id и потом сравнить все поля бд с данными в сессии и если есть нестыковки перезаписать сессию..?

S
На сайте с 21.01.2013
Offline
20
#7

Милованов Ю.С, ага, а потом все эти ынтерпрайзные сайты открываются по полминуты :)

А ещё есть ограничения всяких хостингов на количество обращений к БД, а при таком решении одна страница - один запрос. Но всё зависит от ситуации, конечно, и от наличия свободного времени.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#8
Alkoshenko:
Милованов Ю.С, что-то не понял про айдишку..)
айдишка не изменяется, или предлагаете брать данные по id и потом сравнить все поля бд с данными в сессии и если есть нестыковки перезаписать сессию..?

Поле ID в таблице ЮЗЕРС постоянно. Когда юзверь проходит процедуру авторизации мы ему лепим в сессию $_SESSION['user_id']={ID из базы}.

Теперь каждый раз при смене юзером страницы дергаем таблицу юзерс и выбираем все данные по АйДи, который хранится в сессии.

IL
На сайте с 20.04.2007
Offline
435
#9
SOmni:
Милованов Ю.С, ага, а потом все эти ынтерпрайзные сайты открываются по полминуты

Запрос по pk (подключение к базе, ведь уже установлено), да ещё и кэшированный (на уровне MySQL) может отрабатывать быстрее, чем чтение, например, из файлового кэша. А при изменении информации в базе инвалидация кэша ложится на MySQL.

Про оптимизацию хранения этой инфы о пользователе, например, при помощи key-value хранилища в памяти (а будет ли быстрее?) имеет смысл говорить, когда текущих ресурсов будет "почти" не хватать.

Alkoshenko:
нет, в бд не хранятся, походу в файлах на сервере.. так как использую стандартную функцию php

1. "Стандартные" сессии не знают о существовании друг друга...

2. "Стандартные" (session_start() итд) функции могут "сохранять" инфу в базу или в любое другое хранилище - см session_set_save_handler и по соседству

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
A
На сайте с 06.11.2010
Offline
128
#10

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

12

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