phpmyadmin 本身不管理 laravel 的会话,它只是个 mysql 管理界面;所谓“phpmyadmin 管理 laravel 数据库时会话过期”,实际是两个独立系统在共用同一台 mysql 服务时,因密码策略或权限配置冲突导致的登录失败——不是 laravel 的 session 失效,而是 phpmyadmin 连不上数据库。
MySQL 8.0+ 账号密码过期导致 phpMyAdmin 登录失败
MySQL 8.0 默认启用 default_password_lifetime,一旦用户密码过期(如执行过 ALTER USER ... PASSWORD EXPIRE),phpMyAdmin 就会卡在“正在连接”或直接报 mysqli_real_connect(): (HY000/1862),且不提示具体原因。
- 验证方式:终端执行
mysql -u your_user -p,输入密码后若返回ERROR 1862 (HY000): Your password has expired,即确认为此问题 - 必须用有
SUPER权限的账号(如root)直连 MySQL,执行:ALTER USER 'your_user'@'host' IDENTIFIED BY 'new_password' PASSWORD EXPIRE NEVER;
- 常见坑:
'your_user'@'localhost'和'your_user'@'127.0.0.1'是两个不同账号,Host值必须与实际连接来源完全一致 - 改完务必执行
FLUSH PRIVILEGES;,尤其当权限表缓存未及时更新时
phpMyAdmin 配置中硬编码的密码已过期
若 config.inc.php 中设置了 $cfg['Servers'][$i]['auth_type'] = 'config',密码明文写死在文件里,那账号过期后 phpMyAdmin 根本不会弹登录框,而是直接报 Access denied。
- 不能靠修改 config 文件绕过——密码本身已失效,必须先在数据库层重置账号状态
- 重置后,如果仍想用
config模式,需同步更新$cfg['Servers'][$i]['password']字段为新密码 - 不推荐生产环境用
config模式,建议改用cookie或http认证,避免密码硬编码风险
Laravel 和 phpMyAdmin 共用 MySQL 用户时的权限错配
两者若共用一个数据库用户(比如都用 laravel_app 账号),而该账号只被授予了 SELECT/INSERT/UPDATE 等业务权限,没给 SHOW DATABASES 或 SELECT ON mysql.user,phpMyAdmin 就会功能异常甚至登录失败。
- phpMyAdmin 启动时会尝试读取
mysql.user、information_schema等系统表,缺少对应权限会导致静默失败 - 最小必要权限组合:
GRANT SELECT, SHOW DATABASES, SHOW VIEW, PROCESS, SUPER ON *.* TO 'your_user'@'host';
- 别直接授
ALL PRIVILEGES,尤其是对生产账号;权限变更后同样要FLUSH PRIVILEGES; - 检查是否误用了
localhost(Unix socket)和127.0.0.1(TCP)混用,它们匹配的Host条目不同,权限可能不生效
真正棘手的是:MySQL 密码过期和权限不足这两类问题,在 phpMyAdmin 界面里几乎不报明确错误,只会表现为“连不上”或“空白页”。你得先脱离 phpMyAdmin,用命令行直连验证,否则永远在猜。
立即学习“PHP免费学习笔记(深入)”;



















