必须≥32字符,手填短密钥直接失效:phpMyAdmin 4.9+强制要求$cfg['blowfish_secret']长度至少32字符,否则登录页白屏、反复跳转或报错;须用openssl rand -base64 32等密码学安全方式生成,并置于$cfg['Servers']配置之前。
blowfish_secret 必须 ≥32 字符,手填短密钥直接失效
phpmyadmin 4.9+ 强制要求 $cfg['blowfish_secret'] 长度至少 32 字符,填 '123' 或 'abc123' 会导致登录页白屏、反复跳转或持续报错“配置文件需要密钥”。这不是警告,是硬性拦截。
- 别用日期、用户名、常见单词——哪怕长度够了也容易被暴力猜解
- 别复制网上示例里的
'abcdefghijklmnopqrstuvwxyzabcdefgh',它已公开多年,属于已知弱密钥 - 必须用密码学安全的随机源生成:Linux 下推荐
openssl rand -base64 32 | tr -d '\n' | head -c 32(注意去换行并截取正好 32 位) - PHP 环境可用
bin2hex(random_bytes(16))(生成 32 位十六进制字符串),或base64_encode(random_bytes(24))后手动删掉=和换行再截断
config.inc.php 里 $cfg['blowfish_secret'] 必须写在 $cfg['Servers'] 前面
位置错了等于没配。phpMyAdmin 启动时按顺序加载配置,$cfg['blowfish_secret'] 必须出现在第一个 $cfg['Servers'][$i] 定义之前,否则 cookie 认证模块根本读不到它。
- 正确写法:
$cfg['blowfish_secret'] = '...';→ 然后才是$i = 0;→$cfg['Servers'][$i]['host'] = ... - 常见错误:把密钥写在
$i++后、写在$cfg['Servers'][$i]['auth_type'] = 'cookie';行下面、或者塞进注释块/* End of servers configuration */之后——全都不生效 - 如果用了
include('/var/lib/phpmyadmin/blowfish_secret.inc.php');,确保该文件路径存在、可读,且里面只有这一行(无空行、无 BOM、无多余输出)
改完不重启 Web 服务,浏览器清 Cookie,否则错误照常出现
phpMyAdmin 不会热重载 config.inc.php,Apache/Nginx 缓存 PHP 配置,浏览器也缓存旧的加密 cookie,三者任一没处理都会让你以为改失败了。
- 改完配置后必须执行
sudo systemctl restart apache2(Debian/Ubuntu)或sudo systemctl restart httpd(CentOS/RHEL) - 浏览器需清除所有
localhost或对应域名下的 phpMyAdmin 相关 cookie(特别是pma_*和phpMyAdmin_*开头的) - 别只刷新页面——开隐身窗口测试最可靠;如果仍报错,用
curl -I http://localhost/phpmyadmin/看响应头是否含Set-Cookie,排除服务端未生效
多个 phpMyAdmin 实例共存时,blowfish_secret 不能复用
如果你在同一台服务器部署了多个 phpMyAdmin(比如不同版本、不同路径、或用于不同环境),它们的 $cfg['blowfish_secret'] 必须各自独立。复用同一密钥会导致 cookie 互相污染,表现为登录 A 实例后自动登出 B 实例,或提示“无效的加密 token”。
- 每个实例的
config.inc.php文件都应生成专属密钥,不要 copy-paste - 密钥中避免使用
$、\、控制字符、UTF-8 多字节符号——PHP 解析可能出错,坚持用 ASCII 字母+数字+常见符号如!@#% - 权限必须设为
644:chmod 644 /usr/share/phpmyadmin/config.inc.php,避免 Web 进程以外用户读取密钥
实际中最容易被忽略的是密钥位置和 Web 服务重启——这两步漏掉一个,前面所有操作都白忙。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











