我是一名 PHP 新手,正在尝试了解 session 的工作原理。我有一个关于 php 中 session 行为的一般性问题。
所以我明白,每次调用 session_start() 时,垃圾收集器都可能以一定的概率被调用。所以我的第一个问题是,假设我的网站只有 100 个用户,并且 Web 服务器上的 session.save_path() 文件夹中存储了 2000 个 session 。如果作为 100 个用户之一的用户 A 登录到网站并调用 session_start(),则用户 A 之前的 session 之一会被销毁,还是属于所有用户的 2000 个 session 之一会被销毁?
我的第二个问题是,假设用户 A 在网站上停留了大约 30 分钟,“session.gc_maxlifetime”设置为 1440 秒,即 24 分钟,24 分钟后用户 A 的 session 是否有可能被删除即使用户在网站上仍然处于事件状态,垃圾收集器也会这样做吗?
如果是这样,则每 24 分钟就会启动一个与之前删除的 session 具有所有相同信息的新 session ,因为为了防止用户数据丢失,必须这样做。
如果这些问题听起来非常初级,我深表歉意,但我对 session 概念很困惑,希望澄清这个概念。
任何帮助将不胜感激。
最佳答案
PHP 的 session 垃圾收集器以 session.gc_probability 除以 session.gc_divisor 定义的概率运行。默认情况下,这是 1/100,这意味着以 100 分之一的概率检查上述超时值。
这意味着每当启动新 session 时,就有可能触发垃圾收集器。所有早于 maxlifetime 的 session 都将被删除
如果有人在网站上活跃,则此 session 将永远不会被删除。每次刷新页面时,实际 session 都会重置该 session 的生命周期。只有未使用的 session 才会被删除。因此,如果用户只是在页面上闲置而不执行任何操作,则可以删除此 session 。他必须开始一个新的 session 。
我希望这可以帮助您理解 session
关于当用户仍在网站上时 PHP session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372019/