但我点击这个链接后,wordpress一贯提示invalid key,也便是说key缺点。由于是wordpress框架,从url的路由看,我就打开wp-login.php,然后查看个中的action rp。我直不雅观觉得,该当是get url中的key跟数据库中的key值不相等导致的。以是,想进入系统的mysql一查究竟,但遗憾的是竟然没有mysql权限,我也不知道他的网站是让谁做的,估计是个外包吧。由于朋友是不懂技能的,很多事情问他也是一问三不知。没办法,哪就自己闷头搞吧。
外事未定问google,内事未定问baidu。我习气性地打开baidu,输入:wordpress新用户注册 key无效。创造碰到类似问题的同行也不少,且看他们是如何办理的?他们的建议是:
编辑wp-includes文件夹中的pluggable.php文件,把变量$message里的>符合去掉。我照做了,创造还是弗成的哦。以是,网上的东西,很多都得自己再实践下,否则是要被坑的。但到这一步,我更加确信是key的值出问题了。然后我又仔细看了下邮件发送过来的链接,创造这个链接有个问题。
这个链接里的&是&被转义后的值。那么,我在浏览器里输入时把&更换成&会若何呢?创造竟然OK了,这时密码重置成功了。这样,问题就好办了,理论上,我只要修正pluggable.php,把&更换成&就可以了。$message的变量赋值如下:
$message .= ‘<‘ . network_site_url(“wp-login.php?action=rp&key=$key&login=” . rawurlencode($user->user_login), ‘login’) . “>\r\n\r\n”;
但问题是,我用htmlspecialchars_decode($message)处理也弗成,用str_replace(\公众&\"大众,\公众&\"大众,$message)处理也弗成。也便是说,这个&更换不成&。
我再看这$message变量,rp后面的&怎么没被转义,而$key后面的&却被转义了。以是,到这一步,我就疑惑是不是语句的顺序有问题?然后,我就把&key=$key放到($user->user_login)后面。然后,根据前面baidu的一些见地,顺便把<和>符合也去掉。这样,修正后的message如下:
$message .= network_site_url(“wp-login.php?action=rp&login=” . rawurlencode($user->user_login).\"大众&key=$key\"大众, ‘login’) . “\r\n\r\n”;
问题就这样办理了。
总结:1,涌现问题,问baidu一样平常都能找到一些建议。但这些建议不一定完备精确,自己还得根据实际情形修正。2,html的一些分外符号,在存数据库之前须要被转义,在取出数据库后,须要被转换回来,这也是一个很主要的知识点。