我在这里是个骗局。我有一个使用Google OAuth的应用程序,其要求是增加用户保持登录的时间。
在前端控制器(index.php)调用的脚本的开头,有一个if语句,用于检查全局变量$ _SESSION的存在性。
if(!isset($_SESSION)) @session_start();
这很好,因为我可以看到登录用户的会话数据。现在我不知道如何解决这个问题,因为会话中保存的Google令牌数据也恰好有一个expires_in
密钥,其值为3299(一小时)。
我的分析是,在一个小时之后会有一段时间来自谷歌并控制它以便扩展我应该考虑更新验证通过谷歌离线刷新令牌的代码。我不能确定这个原因是因为我总能在我的应用程序中控制会话的时间至少 - 我遇到的问题是如何部分。
下面是我在@session_start调用上方编写的代码片段:
if(isset($_SESSION)){
$sessionKeys = array(key1, key2,key3); //Keys that are destroyed on logout
$refreshLifetime = false;
foreach($sessionKeys as $key){
if(!empty($_SESSION[$key]){
$refreshLifetime = true;
}
}
if($refreshLifetime){
@setcookie(session_name(), session_id(), time() * 3600);
}
}
对于使用PHP处理会话的所有复杂性,这段代码感觉不对,可能会有不同的操作系统如何处理PHP上的会话添加到客户端和服务器端会话处理。
有人可以帮助我解决这个问题,以便应用程序可以在超时前5小时进行延长会话吗?
我决定将应用程序会话保存路径从/var/lib/php5
移动到应用程序本身的目录中。我开始将session.gc_maxlifetime
设置为10分钟,看看我是否会被锁定或者被重定向到登录页面,但我不是。
我已经添加了cache_expire
设置,即使我在阅读enter link description here后犹豫不决,并且第一个用户注释也没有将缓存过期与gc_lifetime的使用联系起来。
如果我把它放入,应该与我为session.gc_maxlifetime设置的相同吗?
ini_set('session.save_path', __DIR__ .'/../tmp');
ini_set('session.gc_maxlifetime', 300);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_cache_limiter('private');
session_cache_expire(300);
然而,这不起作用,因为我希望在应用程序中不活动5分钟后重定向回登录页面。可能会有一些我遗漏的内容,而且此代码位于调用session_start
的文件顶部。