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

时间:2011-10-20 00:57:38

标签: php session timeout

这不是session_set_cookie_params或session.gc_maxlifetime的普通问题。我挖谷歌,我一无所知。

这种情况非常普遍和平常:我希望用户会话能够继续工作,只要“点击次数”之间的时间少于十分钟,即使他们保持工作数小时。

我在每个请求中做的事情如下:

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();

我期待上面提到的结果,因为session.gc_maxlifetime被设置为默认值1440

编辑:

  

我得到的是,每600秒我就会得到一个没有数据的新会话   从普遍的要求中拯救出来。

用于实现这一目标的惯例是什么?

3 个答案:

答案 0 :(得分:3)

嗯,您当前的解决方案无法保证在定义过去10分钟后GC会严格收集会话。

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

只需存储$_SESSION['last_click_time'] = time();并进行比较。如果超过600秒 - 执行您所需的操作:刷新会话,注销用户,创建日志记录,向某人发送电子邮件等。

答案 1 :(得分:3)

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

  1. 相同的会话cookie名称(PHP默认为PHPSESSID
  2. 同一会话ID,由session_id()
  3. 获取
  4. 新的过期值(在本例中为time() + $lifetime
  5. 相同的路径(例如“/”)和域(通常为$_SERVER['HTTP_HOST']

答案 2 :(得分:0)

$cur_time = time();
if($cur_time > $_SESSION['timeout']){
 //destroy the session (reset)
 session_destroy();
}else{
  //set new time
  $_SESSION['timeout'] = time() + 600;
}

这就是我要做的。