Сеансы Magento исчезают при включенном memcache - PullRequest
4 голосов
/ 08 декабря 2011

У нас возникла проблема, из-за которой у нас случайно пропадают сессии из Magento 1.10, когда мы включили memcache (на веб-сервере nginx).

Кажется, не имеет значения, какое время истечения срока действия файлов cookie установлено.в Magento, по какой-то причине любое случайное время в течение часа пропадает сессия.

Если мы отключим memcache, он работает нормально.

В конечном итоге нам потребуется несколько серверов, подключающихся к одному сеансурешение основано на кэшировании, поэтому memcache кажется единственным вариантом.Кроме того, сейчас мы только кешируем сессии в memcache, и когда я проверяю статистику memcache, мы не приближаемся к пороговому пределу.

Вот настройки memcache в local.xml:

<cache>
    <type>memcached</type>
            <path/>
            <servers>
                <localhost>
                    <host><![CDATA[127.0.0.1]]></host>
                    <port><![CDATA[11211]]></port>
                    <persistent><![CDATA[1]]></persistent>
                </localhost>
            </servers>
</cache>
<session_save><![CDATA[memcache]]></session_save> <!-- db / memcache / empty=files -->
<session_save_path><![CDATA[tcp://localhost:11211?persistent=0&weight;=2&timeout;=10&retry;_interval=10]]></session_save_path>
<session_cache_limiter><![CDATA[private]]></session_cache_limiter>

Сложная часть всего этого заключается в том, что очень трудно воспроизвести, когда сеанс проходит через час.Иногда это происходит в течение минуты, иногда 45 ...

У нас было несколько человек, которые пробовали это во всех различных браузерах на нескольких виртуальных серверных системах (чтобы устранить конфликты), и все они, кажется, ясно понимаютто же самое время.

Теперь логика будет диктовать, что есть процесс, который очищает memcache, но я не представляю, как проверить это, и если я сделал, как сказать, что это очистило его.Я просмотрел код Magento, но не смог найти ничего, что выглядело так, как будто оно очищало это или удаляло сеанс из memcache.

Однако я обнаружил, что файл cookie «внешнего интерфейса» остается в браузере после завершения сеанса, а когда я проверяю в плитах memcache, файл cookie исчезает.

Не всеключ / значения ушли из memcache, в данном случае только некоторые из них.Мой и 2 или 3 других по какой-то причине пропали без вести.

Теперь, что я спрашиваю, так это то, что кто-то не только сталкивался с этим, но у кого-нибудь есть какие-либо дополнительные идеи о том, что попробовать?

Я использовал (известный) memcache.phpфайл для мониторинга системы memcache на сервере.Любые другие идеи / приложения, которые я могу попробовать?

Ответы [ 5 ]

2 голосов
/ 24 января 2012

Это может быть или не быть вашей проблемой, но это была моя. Поместите это здесь, так как другие могут найти это полезным.

Memcached не слишком хорошо подходит для истечения времени, превышающего 30 дней (2592000 секунд.) По-видимому, он интерпретирует числа, большие, чем даты, начиная с эпохи, и немедленно истекает элементы.

Элементы сеанса * в Magento local.xml устанавливают переменные среды PHP. Все релевантные переменные среды PHP, которые не установлены в local.xml, устанавливаются из php.ini (или другого .ini.)

Итак:

В php.ini, если session.gc_maxlifetime установлен выше 2592000, вы получите нерабочий memcached.

Поэтому измените строку в php.ini на следующую:

session.gc_maxlifetime = 2592000
1 голос
/ 08 декабря 2011

Отключите кеширование и посмотрите, пропадают ли сеансы. Если это так, то из-за кэширования содержимого сеансы сбрасываются, используйте отдельный экземпляр memcache на другом порту.

В качестве альтернативы переключите session_save на db и избегайте всего беспорядка за один раз.

0 голосов
/ 24 сентября 2012

проблема была вызвана тем, что ключ SSL установлен неправильно

0 голосов
/ 30 января 2012

Не уверен, что это решит вашу проблему:

<session_save_path>
     <![CDATA[tcp://localhost:11211?persistent=0&weight;=2&timeout;=10&retry;_interval=10]]>
</session_save_path>

Вам необходимо удалить точки с запятой, чтобы убедиться, что указанные параметры используются.Конфигурация была вырезана из форума сообщества Magento.

Другое дело, сколько памяти выделено для вашего memcached daemon?

Используется ли память из-за трафикана Вашем сайте.Установка по умолчанию memcached без каких-либо изменений устанавливает размер памяти в 64 МБ.Если пространство используется, оно просто перезаписывает память.И вы не контролируете, какие сеансы выбрасываются.

0 голосов
/ 10 декабря 2011

Как предположил Clockworkgeek, Magento будет очищать сессии, когда вы очищаете кеш-память.Если вы используете автономный (некластеризованный) сервер, я предлагаю использовать tempfs в качестве хранилища сессий и memcache для хранилища кеша.Когда пришло время добавить другой сервер, вы должны запустить memcache на обоих.В то время вы можете использовать один для хранения сеанса, а другой для хранения кэша.

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