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

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

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

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

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

благодаря

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

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

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

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

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

 php_value session.gc_maxlifetime 86400 

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

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

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

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

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

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

Дополнительную информацию см. В руководстве по методу PHP: http://php.net/manual/en/function.setcookie.php