控制PHP会话超时,每次点击重置计数器


Controlling PHP session timeout, reset counter on each click

这不是session_set_cookie_params或session.gc_maxlifetime的普通问题。我查了谷歌,什么也不懂。

这种情况相当常见:我希望用户会话保持工作,只要"点击之间"的间隔时间少于10分钟,即使他们工作了几个小时。

我在每个请求中所做的是:

session_name('session_cookie_name');
session_set_cookie_params(600, '/'); // 600 is how much seconds in a ten minutes.
session_cache_limiter(FALSE);
session_start();

我期望得到我上面提到的结果,给定那个会话。Gc_maxlifetime设置为默认值1440

编辑:

我得到的是,每600秒我得到一个没有数据的新会话从以前的请求中保存。

实现这一目标的约定是什么?

根据定义,您当前的解决方案不能保证会话在10分钟后被GC严格收集。

更好的解决方案是使用默认的会话生命时间(20分钟或更长),并手动处理点击之间的超时。

仅存储$_SESSION['last_click_time'] = time();并进行比较。如果超过600秒-做你需要做的:刷新会话,注销用户,创建一个日志记录,给某人发邮件,等等

使用setcookie,使用与PHP设置session_start相同的参数设置cookie:

  1. 相同的会话cookie名称(PHP默认为PHPSESSID)
  2. 相同的会话id,由session_id()
  3. 获得
  4. 新的过期值(在本例中为time() + $lifetime)
  5. 相同的路径(如"/")和域(通常为$_SERVER['HTTP_HOST'])
$cur_time = time();
if($cur_time > $_SESSION['timeout']){
 //destroy the session (reset)
 session_destroy();
}else{
  //set new time
  $_SESSION['timeout'] = time() + 600;
}