На сайте есть вызываемый по аякс скрипт, который добавляет товар в корзину. Перестал работать. Диагностирую, что из-за CSaleBasket::GetBasketUserID - ставлю вызов несколько раз подряд, отдает каждый раз новое значение. При вызове CSaleBasket::GetBasketUserID(true) отдает 0. Проверяю не в аяксе - работает нормально. Браузер показывает, что POST запрос уходит с куками BX_USER_ID и PHPSESSID стабильно с одинаковыми для каждого вызова аякс.
Вызываю в этом аяксовском скрипте \Bitrix\Main\Application::getInstance()->getSession() смотрю SALE_USER_ID - тот, что надо, т.е. тот, который для этого юзера Fuserid в статике.
Копаю (дебажу) дальше - вызываю в скрипте Fuser::getSession (временно делаю его public) - в статике отдает объект, в аякс =null
Еще дальше - вместо Fuser::getSession вызываю Application::getInstance()->getSession() - все прекрасно, сессия отдается и в статике, и при аякс запросе.
Как такое может быть, что Application::getInstance()->getSession() при вызове внутри Fuser::getSession () возвращает null, а при вызове не из нее (вместо нее, снаружи) возвращает объект правильно? А, ну и происходит это только в аякс запросе.
Ну, т.е. как подкостылить скрипт понятно - надо не обращаться сразу к CSaleBasket::GetBasketUserID, а пытаться брать сначала SALE_USER_ID прямо из сессии, но непонимание почему вышеописанное имеет место меня сильно беспокоит - почему так?
Вызываю в этом аяксовском скрипте \Bitrix\Main\Application::getInstance()->getSession() смотрю SALE_USER_ID - тот, что надо, т.е. тот, который для этого юзера Fuserid в статике.
Копаю (дебажу) дальше - вызываю в скрипте Fuser::getSession (временно делаю его public) - в статике отдает объект, в аякс =null
Еще дальше - вместо Fuser::getSession вызываю Application::getInstance()->getSession() - все прекрасно, сессия отдается и в статике, и при аякс запросе.
Как такое может быть, что Application::getInstance()->getSession() при вызове внутри Fuser::getSession () возвращает null, а при вызове не из нее (вместо нее, снаружи) возвращает объект правильно? А, ну и происходит это только в аякс запросе.
Ну, т.е. как подкостылить скрипт понятно - надо не обращаться сразу к CSaleBasket::GetBasketUserID, а пытаться брать сначала SALE_USER_ID прямо из сессии, но непонимание почему вышеописанное имеет место меня сильно беспокоит - почему так?