Подтвердить что ты не робот

Запрет сеанса истек в сеансе PHP для неактивных пользователей

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

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

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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

Здесь приведен пример предотвращения таймаута сеанса с помощью вызова 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()

Ответ 3

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

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

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

php_value session.gc_maxlifetime 86400

Ответ 4

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

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

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

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

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

Ответ 5

Как долго длится файл cookie сеанса, когда вы создаете файл cookie сеанса. Если вы используете метод setcookie, аргументом метода является LENGTH, для которого вы хотите, чтобы файл cookie продолжался.

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