当用户仍在网站上时 PHP session 过期

标签 php session

我是一名 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/

相关文章:

android - 如何避免 Android 中的 session 超时

python - Django session - 在登录/注销之间保存 session 数据

php session 在 Android 应用程序中被破坏

php - 在 mysql 列中使用 UNIX 纪元?

PHP XML 实体编码问题

php - mysql php 语法错误

php - CodeIgniter session 错误 - 不允许取消链接操作

php - 有没有一种方法可以在不遍历整个数组的情况下查看任何具有命名键的数组元素中是否有数据?

php - 调用未定义方法 Maatwebsite\Excel\Excel::load()

Facebook-API 中的 session key 和访问 token