wordpress登录遇到不断reauth循环跳转的问题
这两天博客登录不上,今天晚上终于把问题原因找到了。如果去百度搜索reauth跳转的这个问题,会有一些结果,我都试了,对我都没啥用。没办法,只能去翻代码了。
今天把登录验证的整个过程的代码基本都跟着看了一遍。wordpress的代码质量很高,即使是我这种基本不会php的人也能看懂代码的大概意思。这里介绍个非常好用的调试方法,一般调试php可能用var_dump或者print_r会比较多,但是我目前遇到的情况是程序总是返回302跳转,这种情况下var_dump可能就没办法直接输出到网页了。于是我用header作为输出,结合着浏览器开f12调试模式,很容易就能跟踪到代码的运行轨迹。
最后我的问题非常简单,wordpress的登陆判定基于cookie,而wordpress的session信息是保存在数据库中的。然而我的服务器的内存满了,导致数据库不能正常写入新数据,所以每次返回的都是旧的数据。而旧的数据自然比对时间是过期失效的,因此就循环登录-》写入数据库(实际没写上)——》读取数据库-》验证是否失效-》已失效-》跳转回登录页面
这么看来问题主要是在wordpress写入数据库失败那里没有给用户明确的消息提示,因此导致这个问题。在数据库层函数是有返回false的,但是session的实现类并没有获取数据库层函数的返回值。
这个问题还有个比较无语的点是会延迟出现症状。因为默认的cookie的有效期是48h,也就是说出现数据库问题以后的48小时以内,你都还可以凭借以前的cookie信息正常登录。
这两天看wordpress代码也有挺多收获的,让我感受最深的一点是到处都是do_filter或者do_action,让我想起了aop(面向切面编程),思路都是相近的。虽然这种方式给程序员对逻辑的控制提供了极大的便利性,但是对看代码来说实在有点难受,你只能看到do_filter,但是究竟哪些函数注册了这个filter,这个do_filter究竟做了什么,很难直接从代码中翻出来。