Сессия пользователя заканчивается

101
14

У меня есть форма загрузки, в которой пользователь получает около 30 минут. завершить. Все время они простаивают на этой странице. Я использую функцию ini_set(). Вы можете увидеть верхнюю часть страницы загрузки:


    <?php

session_start();
ini_set('session.gc_maxlifetime',10080);

?>


Что происходит, если пользователь простаивает в течение 30 или более минут. данные усекаются, а User_id записывается как значение NULL. Я совершенно не понимаю, как это происходит. Я первоначально установил maxlifetime в php.ini, но перегрузил данные кэшированного сеанса. Итак, я просто использую ini_set. Почему данные будут перепутаны, и user_id не будет записываться. Примечание: если вы делаете форму достаточно быстро, проблем нет.

спросил(а) 2012-03-28T23:56:00+04:00 8 лет, 7 месяцев назад
1
Решение
72

Это потому, что есть другие скрипты с session.gc_maxlifetime значением ~ 30 минут. Таким образом, другой скриптовый сборщик мусора очищает сеансы вне времени (с их точки зрения тайм-ауты сеанса).

Решение: вам нужно изменить глобальное значение session.gc_maxlifetime в php.ini или .htaccess или указать то же (или, по крайней мере, большее) значение в каждый script.

ответил(а) 2012-03-29T00:00:00+04:00 8 лет, 7 месяцев назад
82

Вы должны использовать ini_set() перед session_start().

ответил(а) 2012-03-29T00:01:00+04:00 8 лет, 7 месяцев назад
57

    Настройка session.gc_maxlifetime с помощью ini_set не обязательно влияет на то, как сервер очищает сеансы.
    Например, на Debian (и, я думаю, на некоторых других системах) сеансы очищаются заданием cron, которое не зависит от какой-либо конфигурации, которую вы выполняете внутри script (она только считывает глобальные настройки php.ini).
    Вы можете увеличить этот сервер в php.ini, если это так.


    Вы можете переопределить обработчик сохранения сеанса, а затем обработать сам сеанс...


    вы можете использовать некоторые ajax keepalive-вызовы, чтобы даже когда пользователь простаивал на этой странице формы, есть что-то "разговаривающее" с сервером в течение срока действия, чтобы сохранить сеанс в активном режиме


ответил(а) 2012-03-29T00:05:00+04:00 8 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема