Ubuntu18+Apache+PHP7.4下phpMyAdmin登录报CSRF token存储错误求助
phpMyAdmin登录CSRF令牌存储报错排查指南
报错现象
登录phpMyAdmin时弹出错误提示:
phpMyAdmin - Error Failed to store CSRF token in session! Probably sessions are not working properly.
基础环境
Ubuntu 18 操作系统,搭载Apache服务器,运行PHP 7.4版本。
已完成的常规排查操作
- 已将PHP全局会话存储路径修改为
/tmp,确认目录具备写入权限,相关配置可通过phpinfo()正常查询读取 - 为会话存储目录放开较高写入权限
- 完整重装phpMyAdmin
- 清空会话存储目录下所有历史会话文件
- 清除浏览器本地缓存,分别使用Edge、Firefox浏览器测试常规访问模式,同时验证Chrome无痕模式的访问效果
- 多次调整php.ini中与会话相关的参数配置
以上操作均未解决报错。
可落地的进阶排查方向
该类报错本质是PHP会话机制无法正常写入/读取数据,无需通过重装系统解决,可按以下顺序逐步验证:
- 确认实际生效的php.ini路径:如果Apache通过PHP-FPM运行PHP(而非mod_php模式),CLI下读取的php.ini配置和PHP-FPM进程加载的配置文件可能存在差异,需通过phpinfo()页面定位实际加载的php.ini路径,检查该文件中的会话配置是否符合预期,避免修改了不生效的配置文件
- 检查系统安全策略拦截:Ubuntu默认开启的AppArmor规则可能拦截Apache进程对会话存储路径的写入操作,该问题和目录本身的权限位无关,可临时执行
sudo aa-complain /usr/sbin/apache2将Apache的AppArmor规则切换为提醒模式,验证报错是否消失。若验证后问题解决,可针对性调整AppArmor规则,无需完全关闭安全防护 - 排查phpMyAdmin独立配置覆盖:phpMyAdmin的专属配置文件
config.inc.php可能存在独立的会话路径自定义配置,不跟随全局php.ini设置生效,需检查该文件中是否存在session_save_path相关的配置项,若有则删除或调整为与全局配置一致 - 核对会话Cookie作用域:检查php.ini中
session.cookie_path参数是否设置为/,若错误配置为其他路径(如/phpmyadmin),会导致会话Cookie无法被后续请求正确识别,呈现会话写入失效的表现 - 验证PHP会话实际写入能力:在web根目录新建测试脚本,写入如下代码:
通过浏览器访问该脚本,若可写状态返回<?php session_start(); $_SESSION['test'] = 'test_value'; echo "当前会话ID:" . session_id() . "<br>"; echo "会话路径可写状态:" . var_export(is_writable(session_save_path()), true); ?>false,说明Apache运行身份(默认用户为www-data)对会话路径无实际写入权限,需将会话目录的属主调整为www-data,而非单纯放开目录权限位 - 校验会话序列化处理器兼容性:若php.ini中
session.serialize_handler配置为非默认的php格式(如php_serialize、php_binary),可能和phpMyAdmin的会话读写逻辑不兼容,导致会话数据写入后无法被正确解析,可将该参数临时改回默认值,重启Apache后测试 - 检查分区inode占用情况:即使会话存储目录所在分区剩余磁盘空间充足,若inode被占满也会导致文件无法写入,可执行
df -i /tmp查看对应分区的inode使用率,若使用率接近100%需清理无用文件释放资源
内容的提问来源于stack exchange,提问作者Shao Khan
相关产品推荐
相关产品推荐

