PHP 7.3.28会话管理基于服务器端存储与客户端Cookie标识,通过session_start()触发,默认文件存储、php_serialize序列化、HttpOnly/Secure Cookie强化安全,并支持自定义handler扩展。

PHP 7.3.28 的会话管理机制沿用的是 PHP 内置的 session 扩展实现,核心基于服务器端存储 + 客户端 Cookie 标识的经典模型,未引入新架构,但对底层行为(如默认配置、GC 触发逻辑、序列化处理器)有明确的 7.3 版本语义约束。
session 的基本工作流程
用户首次访问时,PHP 自动生成唯一 session_id(默认通过 phpsessid Cookie 发送),并在服务端创建对应会话数据文件(或写入 Redis/Memcached 等自定义 handler)。后续请求携带该 ID,PHP 自动加载、读取、修改并持久化该会话数据。整个过程由 session_start() 显式触发,且默认启用透明会话 ID 传播(session.use_trans_sid=0,即不自动追加 URL 参数)。
默认存储方式与关键配置项
PHP 7.3.28 默认使用 文件存储(files handler),相关 ini 设置决定实际行为:
-
session.save_path:指定会话文件存放目录(如/var/lib/php/sessions),需确保 Web 进程有读写权限 -
session.gc_maxlifetime:设定会话数据“过期时间”(单位秒),默认 1440(24 分钟),超时后可能被垃圾回收清理 -
session.cookie_lifetime:控制浏览器中 session cookie 的存活时间(0 表示关闭浏览器即失效) -
session.cookie_httponly和session.cookie_secure:默认为On(PHP 7.3 起强制默认开启HttpOnly,提升 XSS 防御)
注意:GC(垃圾回收)不是定时任务,而是在每次
session_start()时按概率触发(由session.gc_probability/session.gc_divisor控制,默认 1/100),因此不能依赖它准时清理过期会话。立即学习“PHP免费学习笔记(深入)”;
序列化机制与安全性增强
PHP 7.3.28 默认使用 php_serialize 作为会话序列化处理器(可通过 session.serialize_handler 设置),替代旧版 php(易受对象注入影响)。它将数组和对象严格按 PHP 内部格式序列化,反序列化时仅还原为数组或字符串,不执行 __wakeup 或 unserialize 魔术方法,显著降低反序列化风险。若需兼容旧数据,可手动设为 php,但不推荐。
可扩展性:自定义 session handler
通过 session_set_save_handler() 可接管全部会话生命周期(open/close/read/write/destroy/gc),常见用于:
- 将会话存入 Redis(借助
redis扩展或session.save_handler=redis) - 使用数据库表持久化(需自行实现 handler 类)
- 实现分布式会话共享(避免文件存储的单点瓶颈)
只要实现 SessionHandlerInterface 的六个方法,即可替换默认行为,且不受 PHP 版本限制。
与 ThinkPHP 等框架的协同要点
ThinkPHP 6/7.3 压测平台等项目虽基于 PHP 7.3,但通常禁用原生 session,改用 Token + Redis 存储登录态(如 think\facade\Cache 管理),原因在于:
- HTTP 接口压测需无状态设计,避免 session 文件锁竞争
- 多进程/多机器部署时,文件存储无法共享
- 更易控制过期、续期与主动销毁逻辑
所以你在部署 sms 测压平台时,看到 .env 里没有 session.* 配置,是正常设计,而非遗漏。



















