PHP Session配置详解:从Cookie使用到个性化设置全解析
本文详细地对 PHP session 的基础配置进行了解析。其中包括了对 cookie 的运用,还有参数的设置,像 GC 机制以及过期时间等方面。同时也涵盖了客户端与服务端销毁 session 的方式,以及个性化配置的关键要点。

摘要由CSDN通过智能技术生成
先阐明本人关于session的基本配置
在 php.ini 文件中进行设置,通过使用浏览器 cookie 来传递 session,设置为 session.use_cookies = 1
session和cookie的交互
PHP 服务端启用 session_start 后,浏览器运行脚本时会自动生成一个名为“PHPSESSID”的 cookie。这个 cookie 的值与存放在服务端的 session 文件名字相同。当浏览器向服务端发起请求时,会将 cookie 值传递给服务端。服务端识别这个 cookie 后,就可以将客户端信息保存到 session 中。
关于session的相关参数设置
PHP 的 session 具有回收机制,即 GC—garbage collect 。
当有一个有效的请求出现时,PHP 会依据全局变量 session.gc_probability 以及 session.gc_divisor 的值,去决定是否开启一个 GC。在通常的情况下,
session.gc_probability = 1
session.gc_divisor = 1000
gc_probability 除以 gc_divisor 的值就是 GC 的触发几率。这意味着,当客户端产生 1000 次请求时,才会触发 1 次 GC。
PHP 设置 session 的过期时间为 session.gc_maxlifetime,其默认值是 1440 秒。当触发垃圾回收(GC)时,PHP 会计算 session 文件的最后修改时间,若该时间超过默认的 gc_maxlifetime 设置时间,那么 session 文件就会被删除。
session 的 cookie_lifetime 是 PHP 设置的含有 session 信息的 cookie 在浏览器中的过期时间。默认情况下为 0,这意味着当浏览器关闭时该 cookie 才会消失,也就意味着服务端的 session 会失效。
销毁session方式
客户端销毁的方式是单独设置 cookie_lifetime 。例如,设置 cookie_lifetime = 30 ,那么 30 秒后该 cookie 就会失效。在这种情况下,意味着服务器会重新生成一个 session 。这样一来,原来的 session 信息在客户端就会消失,尽管在服务端仍然能够看到,但客户端已经没有原来的 session 信息了。
方服务端销毁的情况如下:设置 gc_maxlifetime 后,session 信息会保存在一个文件中。若该文件的最后修改时间加上过期时间仍小于当前时间,那么这个 session 文件就会被删除。然而,经常会发现 session 文件没有被删除,其原因在于 GC 的触发机制。该机制默认是 0.1%,也就是说,你反复请求 1000 次,才会触发一次删除过期 session 文件的操作。当你修改 gc_probability 或者 gc_divisor 的值时,比如 gc_divisor = 0,那么一定会触发删除过期 session 文件的操作。但如果每次浏览器请求都触发 GC,就会导致服务器性能下降。
这是 session 的基础配置。关于单独网站的个性化配置以及其生效的相关内容,我将在另一篇文章中进行介绍。