клиент/сеанс isLoggedIn() возвращает значение false


Я тестировал наш сайт после работы над новой функцией и обнаружил, что на некоторых страницах клиент не входил в систему, хотя это было так. Например, в приветственном сообщении будет отображаться "Добро пожаловать на сайт!" вместо "Добро пожаловать [имя клиента]!". Я подключил наблюдателя к событию controller_action_predispatch и начал печатать результаты для:

$session = Mage::getSingleton('customer/session');
echo $session ? 'set' : 'not set';
echo $session->isLoggedIn() ? 'logged in' : 'not logged in';

И я обнаружил, что синглтон сеанса всегда установлен, но метод isLoggedIn() возвращает false на некоторых страницах в сайт. Я также обнаружил, что сеанс не был закрыт, потому что, если я вернусь на другую страницу, isLoggedIn() снова вернет true; Мне не нужно было снова входить в систему.

Что может быть причиной этого?

У меня есть пользовательский модуль, который также создает пользовательский объект сеанса, но он уже некоторое время хорошо работает (он находится в производстве). Я не знаю, имеет ли это какое-то отношение к этому. Я понял, что у этой сессии (mymodule/session) примерно такая же проблема. Я объявил переменную protected внутри пользовательского класса сеанса и определил общедоступные методы получения и установки для доступа к ней. Иногда значение равно нулю, даже если переменная никогда не сбрасывается.

Я могу только думать, что что-то не так с тем, как Magento обрабатывает сеансы; один может мешать другому?

Author: Vic, 2015-05-23

1 answers

Итак, я обнаружил, что проблема с сеансом клиента заключалась в том, что я создавал свой собственный пользовательский сеанс на ранней стадии. Как я узнал из этой статьи Алана Шторма, создание экземпляров сеансов слишком рано может привести к нарушению хранилища сеансов, поэтому разные страницы, на которых осуществляется доступ к разным сеансам. Вот почему иногда я не получал правильные данные о сеансах клиентов.

Я пытался использовать объект сеанса в пользовательском маршрутизаторе и обнаружил, что это большое "НЕТ". Я изменил свой код маршрутизатора, чтобы вместо этого установить параметр POST для передачи моего значения, а затем сохранить его в сеансе позже в процессе.

P.S. Мой пользовательский сеанс по-прежнему работает с ошибками, так как, похоже, его данные доступны только в запросе страницы, который его установил, а не в каких-либо других последующих запросах, но сеанс клиента теперь в порядке, так что половина проблемы решена.

 1
Author: Vic, 2015-05-25 17:34:36