2012-05-25 3 views
4

Коханы 3.2 заканчиваются слишком быстро. Мой текущий конфиг является:Срок действия сеанса Kohana 3.2 истекает слишком скоро, сокращается срок службы, как ожидается

return array(
'native' => array(
    'name' => 'kohanasession', 
    'lifetime' => 0,  
), 
); 

Использование lifetime => 0 означает, что сеанс будет завершен, когда браузер закрыт. Однако через 1 час сеанс истекает.

Я также пытался использовать всю жизнь различной (например, 36000 => 10 часов), но опять же, она не удалась.

Если я использую крошечный сеансовый ресурс (например, 10 секунд), то срок действия работает отлично. Насколько я проверял, кажется, что если я хочу, чтобы сессия имела срок службы более 1 часа, это не сработает.

Наконец, соответствующие конфигурации мы используем для php.ini

session.save_handler = memcache 
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15" 
session.cache_limiter = nocache 
session.gc_probability = 0 

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

+0

Попробуйте работать с сеансом без библиотеки сеанса Kohana (создайте простой PHP-скрипт). Это поможет вам решить, это проблема Kohana или проблема с сервером. – biakaveron

ответ

5

Параметр lifetime => 0, вероятно, влияет только на продолжительность сеанса cookie.

Что, вероятно, происходит, так как cookie работает нормально, вы отбрасываете данные сеанса пользователя на стороне сервера. PHP имеет сборку мусора сессии, которая по умолчанию немного странная: она отмечает, что сеансы по истечении 24 минут бездействия и имеют 1% -ный шанс на каждый запрос, чтобы очистить все истекшие сеансы.

Вы можете увеличить настройку PHP ini session.gc_maxlifetime, или вы можете установить session.gc_probability в ноль, чтобы полностью отключить автоматическую сборку мусора.

Конечно, есть вероятность, что ваш сервер memcached настроен на выброс данных через некоторый период времени.

Update: Для обработчика сеанса средней, установка session.gc_probability нуля будет путем, чтобы отключить автоматическую очистку полностью. Тем не менее, обработчик сеанса memcache на самом деле уже не выполняет сборку мусора (его обратный вызов gc ничего не делает). Таким образом, изменение любого из session.gc_probability или session.gc_divisor бессмысленно с этим обработчиком сохранения.

Вместо этого обработчик сохранения memcache автоматически устанавливает истечение срока действия при сохранении данных сеанса на сервере memcached (a la expire param - Memcache::set). Обработчик считывает время истечения срока действия для использования с настройкой session.gc_maxlifetime. Итак, это единственная настройка GC, которая действительно имеет значение, когда вы используете обработчик сохранения сеанса memcache.

+0

К сожалению, это не работает, после установки gc_probability в 0 проблема сохраняется. –

+0

Однако session.gc_maxlifetime работал! –

+0

Мой плохой. Заглядывая в [источник расширения memcache] (http://svn.php.net/viewvc/pecl/memcache/trunk/memcache_session.c?view=markup), очевидно, что «нормальный» код GC сеанса не используется с обработчиком memcache. Вместо этого обработчик автоматически устанавливает параметр 'expire', равный' session.gc_maxlifetime' при хранении данных. Увеличение maxlifetime должно обязательно работать, поскольку * должен * установить maxlifetime на 0. –

Смежные вопросы