Сессии в memcached с Zend Framework
Столкнулся тут с очень странным багом. У нас в проекте реализовано централизованное хранение сессий. Т.е. разные бекэнды хранят сессии в одном месте. Это позволяет автоматически “узнавать” пользователя, вне зависимости от того с какого фронт-энда пришел запрос.
При выключенном кэше сессии хранятся в БД MySQL, при включенном в Memcached. И вот тут то и начались глюки. У нас есть основной движок на ZF, и утилитка на PHP. Утилитке надо производить авторизацию пользователя, а для этого подключаться к memcache и устанавливать session_save_handler().
Вроде делал всё как надо, но получал ошибку:
1 2 3 4 |
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, как и в дивжке:
1 2 3 4 5 |
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" |
С помошью кода:
1 2 3 4 |
$iniSets = $options['bootstrap']['resources']['cachemanager']['backend']['memcached']['ini']; foreach ($iniSets as $name => $value) { ini_set('memcache.'.$name, $value); } |
Во-вторых, надо было отключить автоматическую сериализацию.
1 |
resources.cachemanager.frontend.block.options.automatic_serialization = false |
После этого сессия стала открываться как в основной системе, так и в утилите.
У каждого своё мнение и вижу что вы в этом понимаете. Интересно а свой сайт вы купили или сами создали? Очень хорошо всё описано спс.
P.S. Может разместите мою ссылку у себя на блоге может и получится заработать на нём.
Забавный вы спамер 🙂
Yes, you can.
My twitter is http://twitter.com/netandreus
Было бы интересно узнать поподробнее может у вас есть ещё что не выложили тут буду ждать обновлений.
Подписывайтесь на RSS и будете в курсе всех обновлений 🙂
Очень интересная идея,нужно подумать и мне об этом