CakePHP сессия внутри компонента Joomla - PullRequest
0 голосов
/ 15 сентября 2018

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

Первая проблема заключается в том, что объект Request в Cake создает объект Session, который не допускает вероятность того, что сеанс PHP уже может быть запущен;в этом случае выдает ошибку.(Я не вижу изменений в этой области кода в Cake v3.6.)

Моим первоначальным решением этого было сделать так, чтобы мой код плагина закрывал сессию Joomla перед запуском Cake, и позволил Cake сделать свой собственныйвещь со своим собственным cookie и сессионным столом.Но, делая это, я теряю любые изменения, которые Joomla может внести в свою сессию после выполнения моего кода, что не идеально.

Следующая попытка состояла в том, чтобы слегка взломать класс Session (подтверждение концепции;реализация должна быть сделана без каких-либо изменений ядра, если она работает), чтобы разрешить установку элемента _started равным true перед запуском диспетчера.Это работает, поскольку данные Cake и Joomla теперь сохраняются вместе в таблице сеансов Joomla.

Однако данные сеанса Cake включают в себя Auth.User, запись пользователя, вошедшего в систему в данный момент. Эта запись включает объекты типаCake\I18n\FrozenDate.На любой странице загрузки после того, как это было записано в сеанс, этот класс еще не доступен (автозагрузчик Cake не запускался), когда Joomla загружает сеанс.Таким образом, эти поля появляются как __PHP_Incomplete_Class, что затем нарушает другие вещи.

Мое текущее решение этого вопроса - перезагрузить весь сеанс в этот момент (session_reset), сначала скопировав все незафиксированные изменения, внесенные Joomla.до $_SESSION, затем восстанавливая их после сброса.

В ограниченном тестировании пока это работает.Но мне интересно, пропустил ли я какую-то очевидную проблему или очевидное более простое решение.Любые комментарии, предложения или заставляющие задуматься вопросы высоко ценится.: -)

Например, есть ли какой-нибудь способ запустить автозагрузчик Cake до того, как Joomla инициализирует сессию, вообще не взломав ядро ​​Joomla?Это может быть более простое решение.

Если все получится, я посмотрю, что можно сделать, чтобы сделать код доступным.

...