Предотвращение истечения сеанса в PHP Session для неактивного пользователя - PullRequest
20 голосов
/ 11 мая 2011

У меня проблема с моим приложением: мое приложение имеет много форм, и для его заполнения требуется около 1 часа, потому что форма является динамической (можно добавлять другие формы). Проблема в том, что сеанс моего веб-сервера занимает 24 минуты. Когда пользователь заполняет форму, он тратит так много времени и время сеанса истекло, потому что сервер распознает, что пользователь неактивен. Это очень раздражает, когда форма отправлена, большая часть данных была потеряна, и пользователь возвращается на страницу входа. Я пытался сделать так, чтобы срок моей сессии истек через 10 часов с помощью этого кода:

ini_set('session.gc_maxlifetime', '36000');

Но это не работает на моем сервере, возможно ли, что мой сервер препятствует функции ini_set()?

Итак, что я должен сделать для решения этой проблемы? Можно ли предотвратить тайм-аут сеанса, чтобы сеанс можно было увеличить до 10 часов? Или я могу отключить истечение сессии?

Спасибо

Ответы [ 5 ]

38 голосов
/ 11 мая 2011

Вместо установки времени в ini на фиксированную длину, напомните, что тайм-аут сеанса сбрасывается при перезагрузке. Поэтому создайте некоторый ajax-код, который делает запрос каждые 5 минут или около того к файлу (изображение или что-то). Таким образом, таймер сбрасывается каждые 5 минут, и пользователи могут тратить день на заполнение ваших форм.

31 голосов
/ 25 февраля 2015

Вот пример предотвращения тайм-аута сеанса с помощью вызова jQuery Ajax:

var refreshTime = 600000; // every 10 minutes in milliseconds
window.setInterval( function() {
    $.ajax({
        cache: false,
        type: "GET",
        url: "refreshSession.php",
        success: function(data) {
        }
    });
}, refreshTime );

в файле refreshSession.php вы можете сделать что-то вроде session_start ()

5 голосов
/ 11 мая 2011

У меня была такая же проблема в прошлом. Чтобы обойти это, я поместил эти две функции в файл конфигурации, который включается в каждый файл.

session_set_cookie_params(86400);
ini_set('session.gc_maxlifetime', 86400);

и просто для безопасного измерения этой строки в моем файле .htaccess

php_value session.gc_maxlifetime 86400
3 голосов
/ 11 мая 2011

Изменение session.gc_maxlifetime с использованием ini_set должно работать до тех пор, пока вы не измените параметр перед вызовом session_start.Выполнение следующих действий должно работать:

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

Вы также можете изменить эту опцию в других контекстах (см. ответ ChazUK ).

Но я бы не стал устанавливатьвремя жизни куки-файла до фиксированного значения, но сделать куки-файл сеанса настоящим сеансовым куки-файлом , который длится до конца сеанса браузера (т. е. при закрытии браузера).Вы можете сделать это, установив session.cookie_lifetime в 0.

Также учтите, что модель истечения срока действия сессии PHP немного странная , так как расчет времени жизни основанв дату последнего изменения данных сеанса.

0 голосов
/ 11 мая 2011

Как долго длится сеансовый cookie, устанавливается при создании сеансового cookie.Если вы используете метод setcookie, аргумент метода - это ДЛИНА, для которой вы хотите, чтобы cookie длился.

Пожалуйста, обратитесь к руководству по PHP для метода для получения дополнительной информации: http://php.net/manual/en/function.setcookie.php

...