我是一名PHP新手,我正试图围绕会议如何运作。我有一个关于php中会话行为的一般性问题。
所以我理解每次调用session_start()时都可以以一定的概率调用垃圾收集器。所以我的第一个问题是,假设我的网站只有100个用户,并且在Web服务器的session.save_path()文件夹中存储了2000个会话。如果用户A是100个用户之一登录到网站并且调用了session_start(),则用户A的先前会话之一被销毁,或者属于所有用户的2000个会话中的一个被销毁?
我的第二个问题是,假设用户A在网站上大约30分钟,'session.gc_maxlifetime'设置为1440秒,这是24分钟,24分钟之后有可能删除用户A的会话即使用户仍然在网站上活动,垃圾收集器?
如果是这样的话,那么每24分钟开始一次新会话,其中包含先前删除的会话的所有相同信息,因为这样可以防止丢失用户数据。
如果这些问题听起来很简陋,我很抱歉,但我对会议概念感到困惑,并希望澄清这个概念。
非常感谢任何帮助。
答案 0 :(得分:2)
PHP的会话垃圾收集器以session.gc_probability定义的概率除以session.gc_divisor运行。默认情况下,这是1/100,这意味着以100的概率检查上述超时值。
这意味着无论何时启动新会话,都有可能触发垃圾收集器。与所有较旧的会话相比,maxlifetime将被删除
如果某人在网站上处于活动状态,则此会话将永远不会被删除。在每个页面刷新时,实际会话将重置此会话的生命周期。仅删除未使用的会话。因此,如果用户只是在页面上闲置并且什么都不做,则可以删除该会话。他必须开始一个新的会议。
我希望这可以帮助您理解会话
答案 1 :(得分:0)
垃圾收集适用于所有会话,因为PHP不了解会话“所有权”;将删除time() - ini_get('session.gc_maxlifetime')
之前修改的所有会话对象。
每当使用session_start()
访问特定会话对象时,在请求结束时(隐式)或调用session_write_close()
(显式)时,其修改时间(应该)都会更新。这意味着只要用户偶尔继续加载页面,就不会破坏会话。
顺便说一句,我谈的是会话对象而不是文件,因为会话的物理存储可以使用session_set_save_handler()
进行更改。