这不是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:
- 相同的会话cookie名称(PHP默认为
PHPSESSID
) - 相同的会话id,由
session_id()
获得 - 新的过期值(在本例中为
time() + $lifetime
) - 相同的路径(如"/")和域(通常为
$_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;
}