2011-02-08 4 views
1

У меня проблема: сеансы моих приложений истекают неожиданно через 15 минут. Мне нужно, чтобы они истекали через 4 часа.PHP-сессия заканчивается слишком рано

Сервер Centos 5.5, PHP - 5.3.2.

Ниже приведен мой код (включен в глобальный заголовок).

<?php 
session_name('MobileSuiteHQ'); 
if(!session_id()) { 
    session_start(); 
} 
ini_set('memory_limit', '512M'); 
ini_set('session.gc_maxlifetime', 14400000); 
ini_set('session.cookie_lifetime', 14400000); 
ini_set('session.gc_divisor', 1000); 
ini_set('session.use_cookies', 0); 
ini_set('max_execution_time', 300); 
ini_set('session.name','MobileSuiteHQ'); 
?> 

Мой файл .htaccess содержит:

php_value session.gc_maxlifetime 14400000 
php_value session.cookie_lifetime 14400000 
php_value session.use_cookies 0 
php_value session.gc_divisor 1000 

Любая помощь или понимание будет признательна.

EDIT: Мне не удалось войти в систему, когда я обновил файл .htaccess, сессия не начиналась. Так что я сейчас удалил:

php_value session.use_cookies 0 

который теперь позволяет мне зайти.

+0

Является ли файл cookie с запросом? Является ли сеанс умирающим на стороне клиента или сервером? – profitphp

+0

Но сеансы вообще работают, верно? – Gumbo

+0

@profitphp: использование файлов cookie для идентификатора сеанса отключено (см. * Session.use \ _cookies *). – Gumbo

ответ

3

При первом осмотре я бы снизил настройки gc_maxlifetime и cookie_lifetime. Я подозреваю, что 14400000 является немного большим для PHP, с которым можно справиться (теоретически 32-битная ОС должна быть в состоянии подняться до 2147483647, но это все равно может быть фактором).

Если вам нужно всего 4 часа жизни, тогда 14400 будет идеальной настройкой и может решить вашу проблему по указанной выше причине.

+0

14400000 составляет 4 часа в миллисекундах. Я опустил его, чтобы узнать, помогает ли он, а также 64-битный сервер. –

+4

Да, но cookie_lifetime ожидает значение в секундах :) –

+0

Я обновил его, чтобы отразить новые настройки. –

5

Я не знаю о CentOS, но на Ubuntu пакет php5 устанавливает файл /etc/cron.d/php5, который удалит файлы «нетронутой на 24 минуты» сеанса: 9 и: 39 каждого часа. Таким образом, у вас есть минимум 24 минуты и максимум 54 минут.

+0

Спасибо Nate, мы изменили решение mysql-сессии. –

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