脚本宝典收集整理的这篇文章主要介绍了php – WordPress不刷新服务器上的nonce令牌,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
<!-- Client form --> <form> <?PHP wp_nonce_field('my_form','_my_token'); ?> <!-- Additional form fields --> </form>
它会生成这两个字段:
<input type="hidden" id="_my_token" name="_my_token" value="abcdefghij" /> <input type="hidden" name="_wp_http_referer" value="/wp-admin/tools.PHP?page=my-plugin%2Fplugin.PHP" />
当我提交此表单时,我会这样验证:
//Server's side check if(!wp_verify_nonce($_POST['_my_token'],'my_form')){ echo 'Invalid token! Expected token: '. wp_create_nonce( 'my_form'); exit; }
问题是在服务器上,令牌永远不会改变,它始终是相同的,并且验证总是在此步骤中失败.如果我从wordpress注销然后再次登录,则客户端令牌已更改,但在服务器上它是相同的.
我在本地测试了这个,当我再次登录时,它总是在两侧更改令牌,但在我的生产环境中,它只在客户端更改.
它似乎以某种方式缓存,但不确定究竟是什么.我使用过WP Super Cache插件,但它现在已被禁用,此问题仍然存在.我在我的生产网站上启用了多站点功能,但我不相信这与它有关.有任何想法吗?
在没有其他更改的连续刷新时,页面加载之间的随机数可能相同.基本上,如果你坐在那里击中F5,你将获得相同的随机数.
这是设计的.为了使用它们进行验证,需要在短时间内无意义地创建随机数.
再一次,基本上,如果这不起作用,你永远无法验证你的随机数.当你创建它时,值将是一回事,当你重新创建它以验证它时,值将是另一个.验证总是会失败.
wp_verify_nonce()可以接受一个nonce(其他所有相等)最多24小时(见the WP Codex page).您可能需要等待更长的时间才能收到不同的随机数.
可能发生的其他系统事件可能导致生成新的nonce.我自己从来不需要这样做,但似乎你可以使用wp_nonce_tick()来慢跑这个过程.
wp_create_nonce()(由wp_nonce_field()直接使用)和wp_verify_nonce()中的任何一个都可能已被某个插件重写,因为它们都在pluggable.PHP中定义并且可用于覆盖.一个写得很好的WP-aware CDN或其他缓存解决方案可以完全实现持久化会话.我不知道Super Cache是否这样做.
或者,如果您的系统配置尚未执行此操作,您可以选择自己重写这些功能.这将是安全代码并且要小心编写安全代码:开源安全代码最大的优势在于它是经过同行评审的,而您的(新)代码可能不一样.
以上是脚本宝典为你收集整理的php – WordPress不刷新服务器上的nonce令牌全部内容,希望文章能够帮你解决php – WordPress不刷新服务器上的nonce令牌所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。