Page 1 of 1

Хранить сессии в memcache

Posted: Sun Aug 14, 2016 6:20 pm
by nitsik
Здравствуйте. Подскажите, чтобы настроить хранение сессий в memcached достаточно указать

Code: Select all

session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
только в файле /etc/php5/apache2/php.ini (ос Debian 8.0) или надо еще где-то прописывать?
В phpinfo вижу в session.save_path в Local Value /home/admin/tmp - значит надо еще где-то прописывать?

Re: Хранить сессии в memcache

Posted: Sun Aug 14, 2016 7:55 pm
by Stesh
Для начала надо сам memcached установить и запустить (не забыв его перестроить на 127.0.0.1, по дефолту он может будет слушать везде - а это печаль с точки зрения безопасности). Ну и вышеозначенные правки в php.ini: session.save_handler - тип хранилища и session.save_path - путь к нему.

Например

Code: Select all

session.save_handler = memcache 
session.save_path = "tcp://localhost:11211"
Обратить внимание, что синтаксис ТС не правильный, см http://php.net/manual/ru/memcached.sessions.php

Ну и главный вопрос - а зачем? Сколько одновременно открытых сессий, что есть необходимость дергать мемкеш? И самое главное - могут вылезти грабельки, как пример https://habrahabr.ru/post/38261/
значит надо еще где-то прописывать?
Так если phpinfo перед глазами - там и посмотри, откуда и какой ini читается.

Re: Хранить сессии в memcache

Posted: Sat Sep 03, 2016 6:21 am
by nitsik
Stesh wrote:Для начала надо сам memcached установить и запустить (не забыв его перестроить на 127.0.0.1, по дефолту он может будет слушать везде - а это печаль с точки зрения безопасности). Ну и вышеозначенные правки в php.ini: session.save_handler - тип хранилища и session.save_path - путь к нему.

Например

Code: Select all

session.save_handler = memcache 
session.save_path = "tcp://localhost:11211"
Обратить внимание, что синтаксис ТС не правильный, см http://php.net/manual/ru/memcached.sessions.php

Ну и главный вопрос - а зачем? Сколько одновременно открытых сессий, что есть необходимость дергать мемкеш? И самое главное - могут вылезти грабельки, как пример https://habrahabr.ru/post/38261/
значит надо еще где-то прописывать?
Так если phpinfo перед глазами - там и посмотри, откуда и какой ini читается.
Зачем - у меня папка с сессиями забила все свободные inodы, еле смог ее очистить.
Тут http://php.net/manual/ru/memcached.sessions.php написано
you should modify php.ini like that

session.save_handler = memcached
session.save_path = "localhost:11211"
т. е. у меня все правильно, сайт на kohana запустился c memcached, следующий код показывает статистику memcached:

Code: Select all

$memcache = new Memcache;
$memcache->connect('localhost',11211);
print_r($memcache->getStats());
но в phpmyadmin (возможно и на сайте) не работают сессии
session_start(): Cannot find save handler 'memcached' - session startup failed
p. s. Исправил еще тут /home/admin/conf/web/apache2.conf на

Code: Select all

php_admin_value session.save_path 127.0.0.1:11211
все равно пишет ошибку, в phpinfo видно

Code: Select all

session.save_handler = memcached 
session.save_path = "localhost:11211"
и в local value и в master value. Что делать?
p. s.

Code: Select all

session.save_handler = memcache 
session.save_path = "tcp://localhost:11211"
все же заработало, спасибо.

Также тут /usr/local/vesta/data/templates/web/apache2/default.tpl
изменил строку на php_admin_value session.save_path tcp://localhost:11211
чтобы при, например, добавлении зеркал сайту, не сбивались настройки хранения сессий для сайта

Re: Хранить сессии в memcache

Posted: Wed Oct 26, 2016 7:40 am
by skurudo
nitsik wrote:Зачем - у меня папка с сессиями забила все свободные inodы, еле смог ее очистить.
Если такое количество сессий, то может их просто по крону тереть?

Code: Select all

find /home/*/tmp -type f -name 'sess_*' -ctime +5 -delete

Re: Хранить сессии в memcache

Posted: Sat Nov 12, 2016 12:16 pm
by Stesh
skurudo wrote:
nitsik wrote:Зачем - у меня папка с сессиями забила все свободные inodы, еле смог ее очистить.
Если такое количество сессий, то может их просто по крону тереть?

Code: Select all

find /home/*/tmp -type f -name 'sess_*' -ctime +5 -delete
Это уже довольно радикальное решение. У php есть свой сборщик мусора.

Проблема: не чистятся сессии, переполняя раздел.
Решение: проверить/добавить в php.ini примерно такое

Code: Select all

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
Описание можно найти здесь http://php.net/manual/ru/session.configuration.php

Re: Хранить сессии в memcache

Posted: Mon Nov 14, 2016 6:47 pm
by skurudo
Stesh wrote:Это уже довольно радикальное решение. У php есть свой сборщик мусора.
Есть-то он есть, но от версии к версии его работа прямо скажем так себе. Потому предпочитаю руками. Оно как-то надежнее получается, чем на GC встроенный рассчитывать. Не говорил бы, если бы не наступал на грабли, доверяя вот этой функции (привет пых 5.3, 5.4, 5.5).

Re: Хранить сессии в memcache

Posted: Fri Jan 13, 2017 12:23 pm
by nitsik
Stesh wrote: Проблема: не чистятся сессии, переполняя раздел.
Решение: проверить/добавить в php.ini примерно такое

Code: Select all

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
Попробовал так, у меня было

Code: Select all

session.gc_probability = 0
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
сделал

Code: Select all

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
Наблюдаю удаление старых файлов сессий. Пока работает нормально, спс)

Re: Хранить сессии в memcache

Posted: Fri Mar 10, 2017 7:01 am
by one
А чем, насколько лучше хранить сессии в memcache и в каких случая стоит применять данную конструкцию?

Re: Хранить сессии в memcache

Posted: Fri Mar 10, 2017 10:22 am
by Mr.Erbutw
one wrote:А чем, насколько лучше хранить сессии в memcache и в каких случая стоит применять данную конструкцию?
Вот замеры тестов движков. это memcached (основная мысль)
memcache vs memcached различия.
Если сильно нагружены движок +сессии, тогда стоит использовать memcache.
Вот еще до кучи полезностей: XCache, opcache, Zend Optimizer, eAccelerator.