Странное поведение процессора Logout
Все доброго времени суток!
Если коротко — то MODX Revo 2.2.8, процессор Logout отрабатывает без ошибок и MODX потом правила авторизации соблюдает (разлогиненному юзеру становятся недоступны те документы, которые ему не должны быть доступны), но юзер на уровне API в сниппете числится как не разлогиненный. Кто-кто с таким сталкивался? Есть ли «лечение»?
Теперь подробно.
Делаю logout юзера с фронтэнда, как это и описывается в документации (и у Василия статья вот здесь modx.pro/development/56/ об этом же):
И по группам ресурсов этот разлогиненный юзер отрабатывается MODX'ом корректно (то есть те ресурсы, что не должны быть доступны разлогиненому юзеру — ему становятся недоступны).
Однако, при попытке проверить на разлогиненном юзере:
Причем:
И даже
Очень не хочется копаться в процессоре logout, сессии, куках и всем прочем. Может кто уже сталкивался с такой проблемой и решал ее?
Если коротко — то MODX Revo 2.2.8, процессор Logout отрабатывает без ошибок и MODX потом правила авторизации соблюдает (разлогиненному юзеру становятся недоступны те документы, которые ему не должны быть доступны), но юзер на уровне API в сниппете числится как не разлогиненный. Кто-кто с таким сталкивался? Есть ли «лечение»?
Теперь подробно.
Делаю logout юзера с фронтэнда, как это и описывается в документации (и у Василия статья вот здесь modx.pro/development/56/ об этом же):
$response = $modx->runProcessor('/security/logout');
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Logout error. Username: '.$modx->user->get('username').', uid: '.$modx->user->get('id').'. Message: '.$response->getMessage());
}Все, вроде бы, хорошо. Ошибок в журнале нет.И по группам ресурсов этот разлогиненный юзер отрабатывается MODX'ом корректно (то есть те ресурсы, что не должны быть доступны разлогиненому юзеру — ему становятся недоступны).
Однако, при попытке проверить на разлогиненном юзере:
$modx->user->isAuthenticated();получаю true.Причем:
$modx->user->get('id')возвращает id этого, уже разлогиненного юзера, а вовсе не ожидаемый «0».И даже
$user->isMember('Logged in users')Тоже возвращается, что юзер, несмотря на факт разлогинивания, остался членом группы 'Logged in users'.Очень не хочется копаться в процессоре logout, сессии, куках и всем прочем. Может кто уже сталкивался с такой проблемой и решал ее?
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если нет, то похоже на кэширование сесии php-apc.
Если юзер на уровне API аутентифицирован, значит у него есть нужные значения в сесси, вопрос — почему они не удалены?
Фронтэндовый контекст — один; классический «web». Но на всякий случай проставил везде по коду его конкретизацию.
APC убрал совсем (он был установлен на сервере).
Согласен; в этом-то и вопрос.
Но глюки пока все равно продолжаются. Выясняю, что же там сейчас не так.
У меня когда-то такой же вопрос был, обсуждали как-то с Василием. Лень искать :-) Но выход, как оказалось, только такой.
upd. во, нашёл.
Зануление юзера — однозначно работает!
Еще раз благодарю!