Сессия PHP истекает слишком рано

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

Сервер 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

Любая помощь или понимание были бы замечательны.

РЕДАКТИРОВАТЬ: мне не удалось войти в систему, когда я обновил свой файл .htaccess, сеанс не запускался. Итак, я удалил:

php_value session.use_cookies 0

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


person Kyle Hudson    schedule 08.02.2011    source источник
comment
Приходит ли cookie вместе с запросом? Сессия умирает на стороне клиента или на стороне сервера?   -  person profitphp    schedule 08.02.2011
comment
Но сеансы в целом работают, верно?   -  person Gumbo    schedule 08.02.2011
comment
@profitphp: использование файлов cookie для идентификатора сеанса отключено (см. session.use_cookies).   -  person Gumbo    schedule 08.02.2011
comment
Итак, приходит ли запрос с параметром строки запроса идентификатора сеанса PHP? Сессия умирает на стороне клиента или на стороне сервера?   -  person profitphp    schedule 08.02.2011
comment
Вы уверены, что ваш php/apache настроен на чтение файлов .htaccess и установку переменных через ini_set()?   -  person jacobangel    schedule 08.02.2011
comment
@profitphp: phpsessid отсутствует в URL-адресе   -  person Kyle Hudson    schedule 08.02.2011
comment
@jacobangel: он настроен на чтение .htaccess и vars через ini_set, я вижу значения в дампе phpinfo().   -  person Kyle Hudson    schedule 08.02.2011


Ответы (2)


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

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

person Steve Hill    schedule 08.02.2011
comment
14400000 - это 4 часа в миллисекундах. Я понизлю его, чтобы посмотреть, поможет ли это, также сервер 64-битный. - person Kyle Hudson; 08.02.2011
comment
Да, но cookie_lifetime ожидает значение в секундах :) - person Steve Hill; 08.02.2011

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

person Nate Fox    schedule 25.02.2011
comment
Спасибо, Нейт, мы перешли на решение сеанса mysql. - person Kyle Hudson; 26.02.2011