Zend Framework обработчик сохранения сессии memcache и использование существующей сессии - PullRequest
4 голосов
/ 02 февраля 2012

У меня есть устаревшее PHP-приложение в главном домене, которое использует memcache в качестве бэкэнда для наших сессий.Это прекрасно работает.Я пытаюсь добавить новое приложение Zend Framework на поддомен, который может совместно использовать те же сеансы, которые создаются в основном домене.

У меня есть сеанс и обработчик сохранения, настроенные в моем application.ini:

resources.session.saveHandler.class = "App_Session_SaveHandler_Cache"
resources.session.saveHandler.options.type = "Libmemcached"
resources.session.saveHandler.options.maxlifetime = 300
resources.session.saveHandler.options.front.lifetime = 300
resources.session.saveHandler.options.front.automatic_serialization = true
resources.session.saveHandler.options.back.servers.0.host = "127.0.0.1"
resources.session.saveHandler.options.back.servers.0.port = 11211
resources.session.saveHandler.options.back.servers.0.persistent = true
resources.session.saveHandler.options.back.servers.0.status = true
resources.session.saveHandler.options.back.servers.1.host = "127.0.0.2"
resources.session.saveHandler.options.back.servers.1.port = 11211
resources.session.saveHandler.options.back.servers.1.persistent = true
resources.session.saveHandler.options.back.servers.1.status = true

Класс обработчика сохранения сеанса (App_Session_SaveHanlder_Cache реализует Zend_Session_SaveHandler_Interface и использует фабрику Zend_Cache, передавая опцию Libmemcached для внутреннего хранилища.

В моем начальном загрузке метод _init указан как первыйкоторая вызывает начальную загрузку сеанса:

protected function _initForceSession()
{   
    $this->bootstrap('session');
    Zend_Session::start();
}

Я хочу продолжить использовать существующий сеанс из основного домена в моем поддомене, если он существует, и создать новый сеанс, если там его еще нет.

Я могу успешно прочитать идентификатор сеанса в моем новом приложении, которое было создано в унаследованном приложении. Однако я не могу заставить новое приложение фактически читать в самом сеансе.

Я попробовал прямое чтение memcache из нового приложениясвязь (в обход сеанса), и я могу получить данные сеанса таким образом.

Что мне здесь не хватает?

...