WordPress invalid WP token解决方案

4.8
(8)

最近,我发现Wordpress评分插件Rate my Post,经常会报错invalid WP token。而这个错误是因为我用了Cache Enabler插件,缓存页面时间超过12小时以后,该页面上的评分内容就会直接无法读取,报错invalid WP token。最后经过查阅Rate my Post插件的官方,发现这是WP nonce,即WP的随机数机制导致。

后来(2021年1月15号),我发现有个人在登录Wordpress时报错:随机数校验失败。其实,这个也是本文下方内容提到的bug。大致意思,对方把登录页面缓冲了,缓冲时间已经超过12个小时。而Wordpress默认随机数时间在12-24小时之内就会失效。所以,要么取消登录页面的缓冲,要么根据本文的方法,把随机数有效时间改成48小时,网页缓冲(WP Super Cache等缓冲插件)时间改成24小时。

Wordpress invalid WP token解决方案

实际上,WP会为那些涉及安全问题的地方,比如ajax加载之类,会提供一个随机数,每个用户不同。而这个随机数有个有效期,默认为24小时。事实上,按照WP官方描述,这个时间上是12-24小时之间,随机失效。所以,当我Cache Enabler等缓存插件缓冲页面超过12小时,这个随机数就有可能失效,直接导致invalid WP token,即无效的WP令牌。下面,是Wordpress官方的描述:

Note that just as a WordPress nonce is not “a number used once”, nonce lifetime isn’t really nonce lifetime. WordPress uses a system with two ticks (half of the lifetime) and validates nonces from the current tick and the last tick. In default settings (24h lifetime) this means that the time information in the nonce is related to how many 12h periods of time have passed since Unix epoch. This means that a nonce made between midday and midnight will have a lifetime until midday the next day. The actual lifetime is thus variable between 12 and 24 hours. 

请注意,就像WordPress随机数不是“一个数字只能使用一次”一样,随机数生存期并不是真正的随机数生存期。WordPress使用具有两个刻度(生命周期的一半)的系统,并从当前刻度和最后一个刻度验证随机数。在默认设置(生存期为24h)中,这意味着随机数中的时间信息与自Unix时代以来经过了12h的时间段有关。这意味着在午夜和午夜之间创建的随机数将一直存在,直到第二天的午夜为止。因此,实际寿命在12到24小时之间变化。

然后,官方给了一个php代码,添加到主题function.php文件中,即可解决问题。

add_filter( 'nonce_life', function () { return 48 * HOUR_IN_SECONDS; } );
Wordpress invalid WP token解决方案

上述代码,将WP随机数有效期设置为48小时,实际寿命在24-48小时内变化。这时,我们需要将Cache Enabler等缓存插件的缓存有效期设置为24小时就可以了。

Wordpress invalid WP token解决方案

也就是说,如果你不修改这个随机数时间,那么你的缓存时间要修改到12小时。

当然,本篇文章,当然你用到Rate my Post这个插件或者遇到invalid WP token这个报错的时候,才需要去考虑的事情。

共计8人评分,平均4.8

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/635.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2020年10月30日 20:48
下一篇 2020年11月01日 13:52

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号