Php 它是如何工作的
具有此会话设置:Php 它是如何工作的,php,Php,具有此会话设置: @ini_set('session.gc_probability', 1); @ini_set('session.gc_divisor', 1); @ini_set('session.gc_maxlifetime', 60); session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc'); function _s
@ini_set('session.gc_probability', 1);
@ini_set('session.gc_divisor', 1);
@ini_set('session.gc_maxlifetime', 60);
session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
function _sess_gc($maxlifetime) {
echo "GC started";
}
据我所知,在这种设置下,垃圾收集器应该每60秒运行一次(因为概率和除数是相同的)。我现在正在测试这个,奇怪的是每次我刷新网站时GC都会运行,它不会等到上一次调用过了60秒。这让我有点困惑,我理解这里有什么错误吗?session.gc\u概率/session.gc\u除数=x 在你的例子中,x=1。(=100%的机会) 这意味着垃圾收集器将在每个请求上运行。这是任何人提出的每一个要求 垃圾收集器将只删除过时且符合删除条件的会话文件,而不删除最近修改的文件。
被认为是过时的是由会话定义的。gc_maxlife并不总是在每个请求上运行,默认的PHP设置是运行gc的几率为1%<代码>会话.gc_概率(默认值1)/
会话.gc_除数
(默认值100)=0.01(1%概率)
相关手动输入:
我的建议是存储上次触摸会话的时间,并在每次页面加载时对照该值进行检查,如果经过足够的时间,session\u销毁
,并将用户重定向到登录页面
我认为你也应该尝试在你开始你的课程后,在你的公开课中加入这个。在session\u start()之后
行添加
session_write_close();//将$\u会话转储到文件,关闭文件,释放锁。
看看这些措施是否也能改善您的状况。好的。但究竟哪些会话文件将被删除?我的会话数据存储在数据库中。我有自己的清理函数,比如:函数_sess_gc($maxlifest){DB::exec(“从表_sessionwhereexpiry<”.time();)中删除)。因此,如果这个函数运行每个页面请求,那么这个gc_maxlife对我来说没有任何意义。如果你正在使用自己的会话存储(比如在数据库中),那么你发布的垃圾收集是无用的。建立你自己的。只需在数据库中添加一个时间戳,并在更新会话时进行更新。然后添加一些代码,有时会清理表,查找旧会话。你必须自己实现这一点。所以:只需在_sess_gc函数中添加一些删除旧记录的代码即可。是的,但并非所有的gc函数都是无用的。我使用gc_除数和gc_概率来设置如何运行_sess_gc函数。只有我自己设定的到期日,而不是基于gc_maxlifetime。或者,我可以按照您建议的方式进行操作,即在保存会话时检查会话时间戳。