Сессии в memcached с Zend Framework
// 30 июня, 2010 // Memcached, Zend Framework
Столкнулся тут с очень странным багом. У нас в проекте реализовано централизованное хранение сессий. Т.е. разные бекэнды хранят сессии в одном месте. Это позволяет автоматически «узнавать» пользователя, вне зависимости от того с какого фронт-энда пришел запрос.
При выключенном кэше сессии хранятся в БД MySQL, при включенном в Memcached. И вот тут то и начались глюки. У нас есть основной движок на ZF, и утилитка на PHP. Утилитке надо производить авторизацию пользователя, а для этого подключаться к memcache и устанавливать session_save_handler().
Вроде делал всё как надо, но получал ошибку:
Zend_Session_Exception: Zend_Session::start() - /vendors/Zend/Cache /Core.php(Line:310): Error #8 unserialize(): Error at offset 0 of 929 bytes Array in //vendors /Zend/Session.php on line 493 Call Stack: 0.0006 665616 1. {main}() /utils/session.php:0 0.0464 2973824 2. Zend_Session::start() /utils/session.php:49
После этого сессия убивалась, и в основной системе юзера выкидывало.
Solution
А оказалось всё банально просто. Во-первых надо было устанавливать в утилите такие же переменные окружения для memcache, как и в дивжке:
resources.cachemanager.backend.memcached.ini.allow_failover = 1 resources.cachemanager.backend.memcached.ini.max_failover_attempts = 20 resources.cachemanager.backend.memcached.ini.chunk_size = 8192 resources.cachemanager.backend.memcached.ini.hash_strategy = "standard" resources.cachemanager.backend.memcached.ini.hash_function = "crc32"
С помошью кода:
$iniSets = $options['bootstrap']['resources']['cachemanager']['backend']['memcached']['ini']; foreach ($iniSets as $name => $value) { ini_set('memcache.'.$name, $value); }
Во-вторых, надо было отключить автоматическую сериализацию.
resources.cachemanager.frontend.block.options.automatic_serialization = false
После этого сессия стала открываться как в основной системе, так и в утилите.
Спасибо!
Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:
У каждого своё мнение и вижу что вы в этом понимаете. Интересно а свой сайт вы купили или сами создали? Очень хорошо всё описано спс.
P.S. Может разместите мою ссылку у себя на блоге может и получится заработать на нём.
Забавный вы спамер 🙂
Было бы интересно узнать поподробнее может у вас есть ещё что не выложили тут буду ждать обновлений.
Подписывайтесь на RSS и будете в курсе всех обновлений 🙂
Очень интересная идея,нужно подумать и мне об этом
[…] только когда для хранения сессий используется ZendExtra_Session_SaveHandler_Memcached. Когда же используется Zend_Session_SaveHandler_DbTable и сессии […]