Сессия пользователя истекает - PullRequest
0 голосов
/ 29 марта 2012

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

    <?php

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

    ?>

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

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

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

2 голосов
/ 29 марта 2012

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

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

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

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

  3. вы можете использовать некоторые вызовы keepalive ajax, чтобы даже когда пользователь бездействовал на этой странице формы, что-то «разговаривало» с сервером в течение срока действия, чтобы поддержать сеанс

...