有时候在登录WordPress时报错:随机数校验失败,或者认证失败等等。其实,这是WordPress的随机数和缓存导致的问题。其实就是其中一个人把登录页面缓存了,而缓存时间已经超过12个小时。WordPress默认随机数nonce时间在12-24小时之内就会失效。只能清空缓存才能再次正常登陆。接下来搬主题就分享一下加大WordPress的随机数nonce过期时间解决缓存过期错误问题。针对上面的问题,要么清空登录页面的缓存,要么把WordPress随机数nonce有效时间改成48小时,网页缓存(WP Super Cache等缓存插件)时间改成24小时。实际上,WP会为那些涉及安全问题的地方,比如ajax加载之类,会提供一个随机数,每个用户不同。而这个随机数有个有效期,默认为24小时。事实上,按照WP官方描述,这个时间上是12-24小时之间,随机失效。所以,当使用各类WordPress缓存插件缓存页面超过12小时,这个随机数就有可能失效,直接导致认证失败,登陆失败等问题。下面,是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; } );上述代码,将WP随机数有效期设置为48小时,实际寿命在24-48小时内变化。这时,我们需要将我们的WordPress缓存插件的缓存有效期设置为24小时就可以了,比如用的是LiteSpeed Cache插件,那需要设置TTL时间为24小时,也就是86400秒。也就是说,如果你上面的代码不添加的话,那也就是不修改这个WordPress随机数时间,那么你的缓存时间要修改到12小时即可。
THE END