php 7.0 默认session存储机制是files处理器,save_path为/var/lib/php/session;该路径由发行版主动配置,权限严格限制为web进程独有,比/tmp更安全。

PHP 7.0 的 session 默认存储机制是 files + /var/lib/php/session
PHP 7.0 编译安装或通过主流发行版(如 Ubuntu 16.04+/Debian 9+/CentOS 7+)包管理器安装时,session.save_handler 默认为 files,session.save_path 默认指向 /var/lib/php/session(而非 /tmp)。这不是偶然——这是发行版维护者主动覆盖编译默认值的结果。
该路径的权限通常为 drwxrwx--- 2 root www-data 4096(Debian/Ubuntu)或 drwxrwx--- 2 root apache 4096(RHEL/CentOS),确保只有 Web 服务器进程可读写,其他系统用户无法 ls 或 cat 会话文件。这点比 /tmp 安全得多,也避免了被系统级清理脚本误删的风险。
如果你在 PHP 7.0 环境中发现 session.save_path 实际是 /tmp,说明配置被手动改过或继承了旧部署习惯,应立即修正。
PHP 5.6 和 PHP 7.0 的 session.serialize_handler 行为差异
关键区别不在 PHP 版本本身,而在 session.serialize_handler 的默认值和兼容性边界:
-
session.serialize_handler = php是 PHP 所有版本(包括 5.6 和 7.0)的默认值,格式为key|s:N:"value";,用竖线|分隔键与序列化值 -
php_serialize在 PHP 5.5.0 引入,但 PHP 5.6 中已稳定可用;PHP 7.0 完全支持,且行为一致:全程调用serialize($_SESSION),结果形如a:1:{s:2:"tt";s:5:"Lxxx";} - 真正危险的差异出现在 PHP ≤ 5.6.13:其反序列化逻辑会“跳过失败段”,持续向后查找下一个
|—— 这是反序列化漏洞(如 Joomla RCE)的根源。PHP 7.0+ 已修复此行为,遇到非法格式直接返回空或报错,不再盲目跳转
所以,若你维护 PHP 5.6 环境,必须确认已升级至 ≥ 5.6.14,否则即使不用 php_serialize,仅用默认 php 处理器也存在反序列化绕过风险。
为什么 PHP 5.6 升级到 7.0 后 session 数据突然“丢失”
常见原因不是版本跳跃本身,而是升级过程中隐含的配置漂移或序列化不匹配:
- PHP 7.0 默认启用
opcache,而某些老旧自定义SessionHandlerInterface实现未正确处理read()返回false的情况,导致$_SESSION为空 - 应用在 PHP 5.6 时代混用了
php和php_serialize(比如部分接口强制ini_set("session.serialize_handler", "php_serialize")),升级后因 GC 或并发读写,出现解析错位:用php格式写入、用php_serialize解析,或反之 -
/var/lib/php/session目录权限在升级后可能变为root:root,而 Apache/Nginx 进程仍以www-data或apache身份运行,导致无法创建或读取会话文件 —— 此时session_start()不报错,但$_SESSION始终为空
验证方法:直接 ls -l /var/lib/php/session 查所有者,再 ps aux | grep apache 或 grep '^user' /etc/nginx/nginx.conf 确认 Web 进程身份。
PHP 7.0 下 session 文件内容怎么看
不要直接 cat 会话文件 —— 它是二进制序列化数据,乱码是正常的。正确方式是复现读取逻辑:
file_get_contents('/var/lib/php/session/sess_' . $_COOKIE['PHPSESSID'])
然后根据当前 session.serialize_handler 值选择解析方式:
- 若为
php:按|切分,对|后部分用unserialize() - 若为
php_serialize:整个字符串直接unserialize()
注意:unserialize() 可能触发危险对象反序列化,生产环境切勿在不可信数据上调用。调试时建议用 var_dump(session_decode(file_get_contents(...)))(PHP ≥ 7.0 支持)替代裸 unserialize。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











