100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > php表单提交的时候验证失败 解决有时首页表单提交“安全验证失败 请刷新页面后重新

php表单提交的时候验证失败 解决有时首页表单提交“安全验证失败 请刷新页面后重新

时间:2022-08-14 15:09:38

相关推荐

php表单提交的时候验证失败 解决有时首页表单提交“安全验证失败 请刷新页面后重新

在某些特殊的情况下,新打开浏览器,且新打开网站首页,会出现“安全验证失败,请刷新页面后重新提交!”的提示,ctrl + F5 强制刷新之后又能正常提交。这个提示是由/app/duxcms/controller/FormController.php 文件中下面的代码输出的:

//验证token

if(!target('FieldsetForm')->validToken($table,$token)){

$this->error('安全验证失败,请刷新页面后重新提交!');

}

从代码中可以看出,这个文件是调用了 FieldsetForm model 的validToken 验证方法,打开/app/duxcms/model/FieldsetFormModel.php 文件查看下面的代码:

public function validToken($table, $token)

{

$token = session('form_'.$table);

if(empty($token)){

return false;

}

$formToken = trim($token);

if($token<>$formToken){

return false;

}

session('form_'.$table,' ');

return true;

}

这段代码是有问题的,从代码中可以看出,这样的验证是相同的变量和自已在验证,也就是说,只要前端填了,他根本不去和前端提交的 token 进行验证,具体关于这一问题,可以查看这篇二开解决文章 →:修复表单提交 Token 根本没有得到正确验证问题。虽然代码有错,但是逻辑思路是对的,就是后端会通过前端的 的 value 值发起请求自动生成一个 token ,并返回值给 value,前端代码:

代码中 value 的值是动态通过后端生成的,并且把这个 token 值存到 session 当中。而后端validToken 就是验证存到 session 的值和表单传递过来的 token 值是不是一样的,是一样的就可以提交,不是一样的,就拒绝提交。因为不是同一个网站是不可能通过 得到 token 值的。

搞清楚了业务逻辑,但不是问题的根源,问题的原因是:

由于某些不确定情况下,网站首页刚开始打开的时候,得不到 session 数据,自然没有办法正确的比对,而强制刷新后,可能又能得到 session 的值了,所以强制刷新后又可以正常提交。为什么说是不确定的情况呢?因为,我用二开终级版全新安装,全新制作了一个首页表单提交,并不会出现上述错误提示,而且在【chenju】项目之前也只是偶尔有过这样的现象。现在知道问题所在了,解决方法其实非常简单,一句代码即可搞定。

在网站首页模板中的 上方添加一条代码即可:

其实也可以放在 的上方,只不过,这样会导致 Hbuilder 编辑器的代码美化出现无彩色问题。为什么加上这一条代码就可以了呢?下面是网上找到的相关说明,现在记录下来,以备后查:

php表单提交的时候验证失败 解决有时首页表单提交“安全验证失败 请刷新页面后重新提交!”问题...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。