我想知道 PHP 如何检测到特定 session 已超时。
详细说明:我正在使用默认的(基于文件的) session 处理程序,具有默认的 session 生命周期等等。 php.ini 中的所有内容都是默认的。
如果 session 现在开始,PHP 会检查(取决于非 session.gc_divisor 和 session.gc_probability)是否有任何超时 session 。但是,PHP 从哪里获取 session 的最后 session 访问时间以进行检查?
session 文件本身仅包含工作负载,例如x|i:1;
对于 $_SESSION['x'] = 1;
,因此没有关于上次 session 访问时间的信息。
我认为没有与 session 开始时间相关的内存信息,因为 session 在完全服务器重启后仍在工作。
那么,PHP 从哪里获取信息呢?是比较session文件的mtime/ctime吗?
最佳答案
PHP 的默认 session 处理程序使用 serialize()
将 $_SESSION 数据存储在文件中,该文件位于 session.save_path
指定的目录中。通常,文件名类似于 $filename = 'sess_' 。 session_id()
.
因为它只是一个文件,PHP 可以使用文件的 mtime(上次修改时间)来确定哪些 session 文件是过时的。基本上它会抓取所有 mtime 超过 session.gc_maxlifetime
值的 session 文件并 unlink()
它们。正如您所说,发生清理的概率由 session.gc_*
ini 变量控制。
现在,如果您使用 session_set_save_handler()
创建自己的 session 处理程序,这一切都在窗外,您现在可以控制 session 的存储和清理方式,但这确实解释默认行为。
关于php - PHP 如何检测 session 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072003/