解决adminer不能自动登录的问题

adminer是一个非常好用的数据库管理软件, 但是在我把网络服务器从apache换成ngnix之后,它的记住账号密码的功能突然不能用了。

每次重启完电脑,再点左边的登录记录,总是提示说『Master password expired. Implement permanentLogin() method to make it permanent.

这个问题困扰了我很长时间,一开始认为是session的问题,看了下配置&重启虚拟机发现session记录完好。然后发现只要不关浏览器,就没有问题。这就很诡异了。。。

今天下午突然发现每次重启浏览器后它的cookie都不一样,再查看源代码,发现有这么一句:

$params = session_get_cookie_params();
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);

果断编辑代码查看$params["lifetime"]的值,果然是0 => cookie没有保存上!

那答案就很明显了。由于cookie没记上,所以记住密码功能肯定也不能用了。查了下session_get_cookie_params的函数说明,把php.inisession.cookie_lifetime的配置从0改成8640000,问题解决

PS: 顺带补一句,如果在配置中没开启session.auto_start的话, adminer会在代码里重载cookie的生命周期配置,还是会导致cookie生存时间为0, 出现无法记录登录信息的bug。这里可以直接在adminer.php的代码前加行session_name("adminer_sid");session_start(); 或者搜索call_user_func_array('session_set_cookie_params',把前边那句$xe=array(0,preg_replace('~\\?.*~','',$_SERVER["REQUEST_URI"]),"",$ba)改成$xe=array(8640000,preg_replace('~\\?.*~','',$_SERVER["REQUEST_URI"]),"",$ba),手工指定上cookie过期时间就好了


解决adminer不能自动登录的问题
https://www.yaozeyuan.online/2017/10/11/2016/解决adminer不能自动登录的问题/
作者
姚泽源
发布于
2017年10月11日
许可协议