blowfish_secret是phpMyAdmin用于AES-256-CBC加密cookie的32字节密钥,必须手动设置,因其不自动补全且短于32字节会导致登录态失效、反复跳转;需用openssl rand -base64 24等生成真随机字符串并严格置于config.inc.php中$cfg['Servers']配置之前。
blowfish_secret 是什么,为什么必须手动设置?
blowfish_secret 是 phpmyadmin 用于加密 cookie(比如登录会话、临时 token)的密钥,不是密码本身,但直接影响安全性。默认安装的 config.inc.php 里这行是空的或带占位符:$cfg['blowfish_secret'] = '';。不填会导致“服务器错误:无法生成安全密钥”或登录后立即登出——因为 session 加密失败,phpmyadmin 拒绝验证。
用 openssl 命令生成 32 字符随机字符串(推荐)
最可靠、跨平台的方式是用系统级工具生成真随机字符串:
openssl rand -base64 24 | tr -d '\n' | tr '/+' '_-' | cut -c1-32
说明:
-
openssl rand -base64 24生成 24 字节随机数据并 base64 编码(约 32 字符长度) -
tr -d '\n'去掉换行符,避免粘贴进配置时带多余空格 -
tr '/+' '_-'把 base64 中非法 URL 字符替换为 safe 字符(phpMyAdmin 内部使用mcrypt或openssl时要求密钥只含 ASCII 可打印字符) -
cut -c1-32确保严格 32 字符——少于 32 会报错,多于 32 会被截断且可能引入不可见字符
直接写进 config.inc.php 的正确姿势
打开 /etc/phpmyadmin/config.inc.php 或你的 phpMyAdmin 安装目录下的 config.inc.php,找到类似这一行:
$cfg['blowfish_secret'] = '';
把生成的字符串填进去,注意:
立即学习“PHP免费学习笔记(深入)”;
- 必须用单引号包裹,且不能有空格或换行
- 不能用双引号——PHP 会尝试解析其中的变量或转义符
- 示例:
$cfg['blowfish_secret'] = 'Xq2vF9kLmRzPnTbWcYjHsNpQrUoIeA'; - 改完后重启 web 服务(
systemctl restart apache2或nginx)才能生效
常见踩坑点:看似正常但实际失效的情况
即使填了 32 位字符串,仍可能失败:
- 复制时带了不可见 Unicode 字符(比如从网页粘贴),建议在终端用
echo -n "xxx" | hexdump -C检查是否全是 ASCII - 用了中文输入法下的全角引号或空格
- 配置文件被多个地方加载(如 Debian/Ubuntu 有
/etc/phpmyadmin/config.inc.php和/usr/share/phpmyadmin/config.inc.php,优先级以实际 include 路径为准) - PHP 版本 ≥ 8.1 且启用了
opcache.validate_timestamps=0,改完 config 后需手动清 opcache:sudo systemctl reload php8.1-fpm或访问opcache-reset.php
密钥一旦设好就不该再动;如果重装或迁移,必须保留原值,否则所有已登录用户的 cookie 都会失效。



















