Проблемы с сессией, когда APC включен - PullRequest
3 голосов
/ 23 августа 2010

У нас проблема с сеансом PHP, когда на нашем сервере включен APC.

Приложение прекрасно работает без APC. Однако, поскольку мы включили APC, сеансы, кажется, перепутаны, когда сервер испытывает большую нагрузку, то есть пользователи случайно входят в систему как другой. Все возвращается на круги своя, когда мы отключили APC. Похоже, мы не можем найти никого с такой же проблемой, кроме связанной с этими парнями проблемы (set-cookie кэшировался в MS ASP): http://msdn.microsoft.com/en-us/magazine/cc163577.aspx#S2

Кто-нибудь еще имеет подобный опыт? Можете ли вы порекомендовать какие-либо предложения?

PS: Все наши сессии обрабатываются файлами в php.ini. Мы также запускаем apache2.

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

У нас здесь похожая проблема. На данный момент APC является лишь основным подозреваемым, потому что его было трудно воспроизвести.

Мы используем Zend Framework с управлением сессиями, и теория состоит в том, что код Zend кэшируется в APC, а когда система находится под большой нагрузкой, код использует ранее кэшированный SID вместо текущего.

Нашей гарантией является сохранение идентификатора сеанса внутри данных сеанса и сравнение значений при получении сеанса. Если идентификаторы отличаются, мы уничтожаем сессию и выходим.

0 голосов
/ 23 августа 2010

Возникла проблема с APC, когда объекты пользовательской обработки сеансов уничтожаются до сохранения данных сеанса.Это может быть не связано с вашей проблемой, но явный вызов session_write_close до того, как обычное завершение работы PHP исправит эту проблему.

Хотя ваша проблема звучит несколько иначе, но я могу подтвердить, что проблемы действительно существуют.

0 голосов
/ 17 сентября 2010

Просто, чтобы завершить публикацию, нам удалось решить эту проблему тремя способами:

1) Мы сделали дополнительные проверки, чтобы убедиться, что IP-адрес соответствует идентификатору сеанса, и выйти из системы в противном случае.,Затем мы могли бы использовать это для отслеживания того, как часто возникает проблема.

2) Мы переключились на XCache и сразу увидели меньшее количество ошибочных идентификаторов сеансов.Однако при очень большой нагрузке проблема снова поднимает свою уродливую голову.

3) Затем мы удваиваем память для Xcache в конфигурации php (xcache.size и xcache.var_size), и теперь проблема исчезла.1007 *

Итак, мы подозреваем, что проблема была в том, что у APC или Xcache не хватало памяти.Мы все еще ждем, чтобы увидеть, является ли это постоянным решением.

0 голосов
/ 23 августа 2010

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

...