Thinkphp使用ajax 提交时遇到的 表单令牌错误 问题

[ 2017-05-10 09:48:32 | 作者: admin ]
字号: | |
thinkphp表单令牌的作用是防止表单重复提交,开启自动验证之后会自动在表单里面生成一个 __hash__ 的隐藏表单,表单通过POST方式提交后与服务器中的session做判断,不一致就提示 表单令牌错误

解决办法:使用post提交ajax,然后在post数据中加入__hash__,用来完成令牌验证。


服务器端调用create方法会调用 autoCheckToken() 来验证表单令牌。
/lib/core/model.class.php 中有一个函数 autoCheckToken() 执行表单令牌错误的验证,代码如下:
 

         // 自动表单令牌验证
         // TODO ajax无刷新多次提交暂不能满足
         public function autoCheckToken($data) {
                if(C('TOKEN_ON')){
                     $name = C('TOKEN_NAME');
                     if(!isset($data[$name]) || !isset($_SESSION[$name])) { // 令牌数据无效
                     return false;
                     }

                     // 令牌验证
                     list($key,$value) = explode('_',$data[$name]);
                     if($_SESSION[$name][$key] == $value) { // 防止重复提交
                     unset($_SESSION[$name][$key]); // 验证完成销毁session
                     return true;
                     }
                     // 开启TOKEN重置
                     if(C('TOKEN_RESET')) unset($_SESSION[$name][$key]);
                     return false;
                }
                return true;
         }
[最后修改由 admin, 于 2017-05-10 10:00:28]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2406

这篇日志没有评论。

此日志不可发表评论。