В этой статье я хочу вам рассказать об особенностях использования сессии в MODX. Как сессия загружается при каждом запросе я уже писал. Сейчас давайте рассмотрим как разработчики системы MODX её используют.

Самое первое, что бросаетс в глаза, — из коробки сессия хранится в базе данных. Почему то разработчики решили всё хранить в БД. Наверно для этого были свои причины. Мы можем только гадать. Но они предусмотрели возможность использования стандартного варианта хранения сессий в файлах. Нужно просто указать пустое значение в системной настройке session_handler_class.

Как я уже писал в предыдущей статье, аутентификация пользователей завязана на сессии. Это стандартный механизм у всех систем. Но разработчики MODX пошли дальше. Они, я уверен, из лучших побуждений добавляют в сессию много специфической информации о пользователе. В основном это связано с правами — информация по контекстам, по группам ресурсов, по группам пользователей, по отдельным объектам. Казалось бы, ну что тут особенного. Зато удобно — MODX загрузился и вся информация о пользователе сразу доступна. Но эту информацию можно менять как через UI в админке, так и программно. И делать это может кто угодно, у кого есть допуск. Вот тут и возникает проблема — эти изменения не синхронизируется. Т.е. вы добавили пользователю права или удалили, он об этом не узнает, пока не перелогинится и не загрузит новую сессию.

Отсюда же вытекает и проблема заблокированного пользователя. Вы не можете выкинуть его из системы пока у него не кончится сессия. И решаются эти проблемы одним валюнтаристким решением — удалением всех сессий в меню «Управление». Таким образом всех залогиненных пользователей выкинет. И если в этот момент кто-то что-то делал на сайте, то всё пропадёт. Неприятная ситуация для сайта с высокой посещаемостью.

Если проблема с заблокированным пользователем решается в AdminTools и, насколько я знаю, в Office, то с остальным не всё так просто. Для текущего пользователя придумали кастыль — правят текущую сессию. А другим пользователям поправить сессию не получится. Идентифицировать сессии по пользователям невозможно.

Таким образом, простое решение использовать сессии для хранения прав пользователя оборачивается определёнными проблемами. Лично мне кажется, что разработчики перестарались и не до конца всё продумали. Нельзя в сессию пользователя добавлять информацию, которую можно менять снаружи сессии. Но изменить данный механизм уже невозможно!

0   2855

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.