Редактирование / обновление сеанса PHP пользователя без постоянного общения с MySQL - PullRequest
0 голосов
/ 18 сентября 2011

В настоящее время я создаю веб-приложение, которое использует сочетание аутентификации OpenID и uname / pw для аутентификации пользователей.Пользователям предоставляется сеанс PHP при успешном входе в систему, и некоторая информация об их учетной записи (адрес электронной почты, группа пользователей, бла-бла) записывается в этот сеанс.

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

session_start();
mysql_start(connection_stuff);
if (mysql_query("SELECT FROM users WHERE uid = '$_SESSION['uid']' AND KillSession = true")) { Kill session, force reauthentication };

Однако, если сделать это так, есть два недостатка:

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

Можно ли каким-то образом изменить сеанс пользователя, пока он еще в нем , не прибегая к принуждению к повторному входу в систему ?Некоторые люди, похоже, предлагают в этом потоке стекового потока , используя session_id, чтобы перейти к пользователю, а затем поиграть с его переменными, но это похоже на способ сделать это.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Даже если вы выражаете беспокойство по поводу необходимости запрашивать базу данных при каждой загрузке страницы, я предполагаю, что это, скорее всего, не окажет заметного влияния на производительность. Если сайт, в первую очередь, управляется базой данных, то это всего лишь вопрос еще одного запроса. Я бы сказал, что перенос всей обработки сеанса в базу данных (хранение переменных сеанса в таблице) может улучшить вашу систему с точки зрения гибкости. Будет намного проще развернуть вашу систему на нескольких серверах и выполнить правильную балансировку нагрузки, если вы считаете, что это необходимо в данный момент. Вот как большие системы CMS обрабатывают свои сессии. Другими словами, я советую придерживаться дополнительного запроса и рассмотреть возможность перемещения состояния сеанса в базу данных.

0 голосов
/ 18 сентября 2011

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

Если администратору необходимо прекратить сеанс, просто DELETE из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...