防止PHP会话中的会话因非活动用户而过期

dia*_*ian 20 php session session-timeout

我的应用程序有问题:我的应用程序有很多表单,需要大约1小时才能完成此表单,因为表单是动态的(可以添加其他表单).问题是:我的Web服务器的会话是24分钟.当用户填写表单时,他们花了很多时间并且会话超时,因为服务器识别出用户处于非活动状态.当表单提交,大多数数据丢失并且用户返回登录页面时,这非常烦人.我尝试使用此代码在10小时内使会话过期:

ini_set('session.gc_maxlifetime', '36000');
Run Code Online (Sandbox Code Playgroud)

但它不能在我的服务器上工作,我的服务器可能会阻止ini_set()功能吗?

那么,我该怎么做才能解决这个问题呢?我可以阻止会话超时,以便会话可以扩展到10小时吗?或者我可以禁用会话到期吗?

谢谢

小智 44

不要将ini中的时间设置为固定长度,而是提醒重新加载时重置会话超时.因此,创建一些ajax代码,每5分钟左右对文件(图像或smth)执行一次请求.这样,计时器每5分钟重置一次,用户可以花一天时间填写表单.

  • 不能相信这个问题的最佳解决方案之一到目前为止已经有0个赞成 - 只是增加会话 - 生命周期应该是最糟糕的解决方案 - 这是一个巨大的安全风险我从未见过网络应用程序其中_every_ usecase必须具有长生命会话业务逻辑...所以,对需要它的用例进行一些ajax调用,并在服务器端保留session-timeout-time _untouched_!geees ... (3认同)
  • 你能给出一个示例代码吗?我没有使用ajax的经验。 (2认同)
  • 这是示例:http://stackoverflow.com/questions/12597176/how-to-keep-session-alive-without-reloading-page (2认同)

MDe*_*ein 32

这是一个通过使用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 );
Run Code Online (Sandbox Code Playgroud)

在refreshSession.php中你可以做类似session_start()的事情

  • 最佳答案,Instagram和Facebook使用此方法 (3认同)

Cha*_*zUK 5

我过去也遇到过同样的问题.我做的是将这两个函数放在一个配置文件中,该文件包含在每个文件中.

session_set_cookie_params(86400);
ini_set('session.gc_maxlifetime', 86400);
Run Code Online (Sandbox Code Playgroud)

并且只是为了安全衡量我的.htaccess文件中的这一行

php_value session.gc_maxlifetime 86400
Run Code Online (Sandbox Code Playgroud)