我的应用程序有问题:我的应用程序有很多表单,需要大约1小时才能完成此表单,因为表单是动态的(可以添加其他表单)。问题是:我的Web服务器的会话是24分钟。当用户填写表单时,他们花了很多时间并且会话超时,因为服务器识别出用户处于非活动状态。当表单提交,大多数数据丢失并且用户返回登录页面时,这非常烦人。我尝试使用此代码在10小时内使会话过期:
ini_set('session.gc_maxlifetime', '36000');
但它在我的服务器上无效,我的服务器是否可能阻止ini_set()
功能?
那么,我该怎么做才能解决这个问题呢?我可以阻止会话超时,以便会话可以扩展到10小时吗?或者我可以禁用会话到期吗?
由于
答案 0 :(得分:38)
不要将ini中的时间设置为固定长度,而是提醒重新加载时重置会话超时。因此,创建一些ajax代码,每5分钟左右对文件(图像或smth)执行一次请求。这样,计时器每5分钟重置一次,用户可以花一天时间填写表单。
答案 1 :(得分:30)
这是一个通过使用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()
的操作答案 2 :(得分:5)
我过去遇到过同样的问题。我所做的就是将这两个函数放在一个配置文件中,该文件包含在每个文件中。
session_set_cookie_params(86400);
ini_set('session.gc_maxlifetime', 86400);
只是为了安全衡量我的.htaccess文件中的这一行
php_value session.gc_maxlifetime 86400
答案 3 :(得分:3)
ini_set
之前更改选项,使用session_start
更改 session.gc_maxlifetime 即可。所以做以下工作应该有效:
ini_set('session.gc_maxlifetime', 36000);
session_start();
您还可以在其他环境中更改该选项(请参阅ChazUK’s answer)。
但我不会将cookie的生命周期设置为固定值,但会使会话的cookie成为真正的session cookie,直到浏览器会话结束(即在浏览器关闭时)。您可以将 session.cookie_lifetime 设置为0
来完成此操作。
还要考虑PHP’s session expiration model is a little quirky,因为生命周期计算是基于会话数据的最后修改日期。
答案 4 :(得分:0)
创建会话cookie时会设置会话cookie的持续时间。如果使用setcookie方法,则该方法的参数是您希望cookie持续使用的LENGTH。
有关其他信息,请参阅PHP手册中的方法: http://php.net/manual/en/function.setcookie.php