thinkphp6令牌防止表单重复提交

Thinkphp 6.0模版的杂项和表单令牌 Thinkphp 6.0模版的杂项和表单令牌的功能。 阅读详情

使用TP框架的表单令牌功能

原理:生成一个token字符串,session中保存一次,页面中放一个;

页面发送请求时携带token字符串,控制器中进行验证,验证成功后重置。

生成token两种语法:

1.{:token()} 生成一个隐藏域, 存放token令牌

<input type="hidden" name="__token__" value="{:token()}" />

 也可以使用

{:token_field()}

得到 形似以下的代码

<input type="hidden" name="__token__" value="fe9f76dcda3ee3972b23ad0428934bb7">

2.在控制器生成

<?php

namespace app\controller;

use think\Request;
use think\facade\View;

class Index
{
    public function index(Request $request)
    {
        $token = $request->buildToken('__token__', 'sha1');
        View::assign('token', $token);
        return View::fetch();
    }
}

然后在模板表单中使用:

<input type="hidden" name="__token__" value="{$token}" />

控制器中对token进行校验:

使用表单验证,在任何一个字段的验证规则中,加上 “token”规则

 /**
     * 登录
     * @param Request $request
     * @return \think\response\Json|void
     */
    public function doLogin(Request $request){

        $result = [
            'code' => 200,
            'msg' => 'ok',
            'data' =>[]
        ];

        // code msg data
        try {
            // 验证请求令牌
            $check = $request->checkToken('__token__');
            if(false === $check) {
                throw new ValidateException('invalid token');
            }

            $username = $request->post('username');
            $password = $request->post('password');
            # 验证非空
            validate(\app\admin\validate\Login::class)->check([
              'username' => $username,
              'password' => $password,
            ]);
            $adminInfo = Manager::where('username','=',"{$username}")->find();
            if ($adminInfo) {
                // 判断密码
                if ($adminInfo->password == encryptPassword($password)) {
                    Session::set('username',$adminInfo->username);//session

                    #记录日志信息
                    Log::write($username.'登录成功','info');
                    return redirect('/admin/goodsList');
                } else{
                    throw new \think\Exception('密码错误', 20002);
                }
            } else {
                abort(20001,'用户名不存在');
            }
        }catch (ValidateException $exception) {
            $result['msg'] = $exception->getError();
           return json($result);
        }catch (\Exception $exception) {
            Log::write('测试日志信息,这是警告级别,并且实时写入','notice');
            $result['msg'] = $exception->getMessage();
            $result['code'] = $exception->getCode();
            return json($result);
        }
    }

AJAX提交

如果是AJAX提交的表单,可以将token设置在meta中

<meta name="csrf-token" content="{:token()}">

或者直接使用

{:token_meta()}

也可以在全局Ajax中使用这种方式设置X-CSRF-Token请求头并提交:

 headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
tp6 支付防止表单重复提交 public function pay(){ // 防止重复支付 bug // 前端 =》 按钮禁用 // 后端 => 怎么处理 // 第一次请求、我把订单id放在缓存 // 第二次请求、判断订单id是否在缓存、如果在、返回订单单正在处理中、 $order_id = \request()->post('order_id'); $pay_type = \request()->post('pay_type'); try { if (!is_numeric($orde... 阅读详情

相关推荐

ThinkPHP防止重复提交表单的方法实例分析

本文实例总结分析了ThinkPHP防止重复提交表单的方法。分享给大家供大家参考,具体如下: 为什么会有表单重复的坑 在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。 导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果。 如何解决? 总结网上的解决办法和自己的测试,可以用以下几个办

ThinkPHP6实战开发电商系统

课程功能亮点:本次电商系统涵盖了ThinkPHP6常见的大部分功能知识点,多应用、中间件、视图渲染、助手函数、图片上传、验证码、数据库、模型、异常等。电商系统界面参考早期的小米商城官网,包含:商品SKU、库存、购物车、阿里云短信、会员积分、微信支付、支付宝支付等商城功能。 PS:由于本次老师需要录制的课程章节数量比较多(总课程预计100+N节课时,如果有新内容,会继续增加),既要加快录制速度,又要提高课程质量,如有疏漏或服务不周之处敬请提出,同时希望能够多多包涵,您的支持与理解,也是老师高品质录课前进的动力,让我们期待能够一同进步吧!谢谢!  

ThinkPHP 防止表单重复提交的方法

防止表单重复提交有很多种方法,其不外乎,客户端脚本防止刷新,服务端token验证等等,thinkphp内置了表单token验证,可以方便的防止表单重复提交

ThinkPHP6表单令牌防止重复提交

使用表单令牌需先开启session,session在ThinkPHP6中默认是未开启的,因为Token的值是会存到session中的,session是一个应用到整个浏览器的应用程序 在表单中使用表单令牌,首先需要设置一个隐藏域用来存放Token值 <input type="hidden" name="__token__" value="{:token()}" /> 还可以直接使用 {:token_field()} 默认的令牌Token名称是__token__,如果需要自定义名称及令

qq_58730260的博客 1807

紫光同创PDS软件操作指南:如何为FPGA新增自定义Flash型号

本文详细介绍了在紫光同创PDS软件中为FPGA新增自定义Flash型号的完整操作指南。针对官方支持列表之外的SPI Flash芯片,文章从理解FPGA配置逻辑入手,逐步讲解如何通过扫描Flash ID、在Flash Operator中精准填写参数、转换.sbit文件,最终完成固化的全过程,并分享了高级技巧与常见问题排查方法,帮助工程师摆脱对预设型号的依赖,实现灵活选型。

weixin_29204749的博客 327

Cadence Allegro 17.4学习记录开始00

Cadence Allegro 有三个版本,16.6,17.2,17.4。现在主要学习最新的版本17.4.原理图设计:OrCADPCB设计:Allegro主要用到的就下面三个图片软件:PCB Editor 17.4 是用来画PCB和元器件封装的;Padstack Editor 17.4 是用来画元器件焊盘的;Capture CIS 17.4 是用来画原理图和原理图库的。其实Cadence还有很多功能,现在计划先学习以上内容,后面熟悉了这个软件,还可以继续学习放仿真等功能。

qq_31444421的博客 7450

php为表单生成令牌,ThinkPHP6.0表单令牌 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...

简单易用的表单令牌表单令牌可以提升表单验证的易用和安全性表单令牌可以提升表单验证的易用和安全性添加令牌Token验证验证规则支持对表单的令牌验证,首先需要在你的表单里面增加下面隐藏域:也可以直接使用{:token_field()}默认的令牌Token名称是__token__,如果需要自定义名称及令牌生成规则可以使用{:token_field('__hash__','md5')}第二个参数表示to...

weixin_35278163的博客 463

logisim计组实验八 乘法器

原理:点这里 有问题欢迎留言哦~ 文章目录五位阵列乘法器电路图时间延迟分析六位补码阵列乘法器五位无符号乘法流水线原理图电路图原码一位乘法器原理图电路图补码一位乘法器 五位阵列乘法器 电路图 此处注意:全加器FA的cout端是进位端而非输出端 使用硬件控制比循环累加的速度快得多。 但是存在串行进位链 改进版: 时间延迟分析 T是计算相加数的一级门延迟 3n–>2n 性能差别在1.5倍 ...

treblez's blog 2万+

ThinkPHP6 使用JWT 实现用户认证以及无痛刷新访问令牌

使用的是thans/tp-jwt-auth 包。支持Header、Cookie、Param等多种传参方式。包含验证并且自动刷新等多种中间件。 官网:https://gitee.com/thans/jwt-auth 环境要求 php >= 7.0 thinkphp ^5.1.10 || ^6.0.0 我这里使用的是ThinkPHP6 + PHP7.3 安装 composer require thans/tp-jwt-auth 执行以下命令,将生成jwt.php,并且.env中会

php菜鸟技术天地 6261

二、频率调制光谱(FMS)技术——error信号的数学模型及其他推论

一些推论。

qq_41111336的博客 1606

go实现MQTT broker(附完整源码)

go实现MQTT broker(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 577

thinkphp表单令牌防止重复提交

1、在载入表单的控制器代码中传入token $_SESSION['token'] = md5(rand(1,999));//表单令牌防重复操作使用 2、在模板中表单中提交token 3、在保存操作中先验证token,然后保存,保存的同时销毁token,这样就防止了刷新提交页面重复保存数据的问题出现 if($_POST){ if($_SESSION['token'

qq605053977的博客 1798

多模态论文笔记——BLIP

本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:BLIP。

haopinglianlian的博客 2454

thinkphp如何使用令牌防止表单重复提交

thinkphp的表单如何使用令牌功能,如何防止表单重复提交? thinkphp框架中已经定义好了令牌功能,我们只需要按照格式配置和启用就可以了。 令牌的使用思路? 首先需要在thinkphp的配置文件中添加令牌参数,配置参数如下图: //令牌配置文件 'TOKEN_ON'=>true, // 是否开启令牌验证 'TOKEN_NAME'=>'...

Alvin博客 484

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

thinkphp防止重复提交表单的技巧

在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。 导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,...

weixin_43814458的博客 859

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

thinkphp 表单令牌使用

(适用于thinkphp3.2,能在下图中找到红线文件) 一、配置文件 在conf文件夹下配置两个文件 1)config.php   <?php return array( 'TOKEN_ON' => true, // 是否开启令牌验证 默认关闭 'TOKEN_NAME' => '__hash__', // 令牌验证的表单隐藏字

slpond的博客 4033

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)

表单令牌Token0. 前言1. TP6 令牌token使用1.1 表单提交1.2 AJAX提交2. TP6 令牌token验证2.1 路由验证2.2 控制器验证2.3 验证器验证 0. 前言 表单令牌是为了防止表单重复提交,防止跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF。 1. TP6 令牌token使用 1.1 表单提交 如果使用了默认的模板引擎,可以直接使用下

张营的技术博客 3607

thinkphp5第35课:表单令牌

表单令牌的作用:避免表单的重复提交。当然还有另外一个原因,使用表单令牌可以防止黑客绕过表单,伪造数据进行提交。 首先,在前端页面的表单中,添加:<input type="hidden" name="__token__" value="{$Request.token}" /> 比如下面的代码: <!DOCTYPE html> <html lang="en"&gt...

李书明(石家庄)的专栏 873

thinkphp5 第38课:正确使用表单令牌

使用表单令牌,一方面可以防止重复提交表单,二方面可以防止黑客CSRF。 表单令牌是在服务器端随机生成的一串字符,保存在session中,并传递给前端页面,当前端数据提交时,一并携带令牌提交给服务器,服务器验证提交的令牌与session中的令牌是否一致,并同时销毁session中的令牌。所以每次请求时的令牌只能使用一次,下次如果使用同样的令牌就会失效,这即阻止了重复提交,也防止了黑客CSRF。 ...

李书明(石家庄)的专栏 1373

php ajax 重复提交,ThinkPHP防止重复提交表单的方法实例分析

本文实例总结分析了ThinkPHP防止重复提交表单的方法。分享给大家供大家参考,具体如下:为什么会有表单重复的坑在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或...

weixin_35879989的博客 360

thinkphp5 第39课:表单令牌应用到 url 上

thinkphp5的表单令牌,我们一般应用到表单提交上。当然也可以应用到url上,生成随机的参数值,这样可以有效避免用户更改url,也可以防止别人盗取链接。因为我们的url是一次性的,第二次访问无效。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &l...

李书明(石家庄)的专栏 400

else if thinkphp_ThinkPHP防止重复提交表单的技巧

php中文网最新课程每日17点准时技术干货分享在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在...

weixin_39705193的博客 98

防止表单重复提交

防止表单重复提交

chou142857的博客 597
上一篇: thinkphp6实现动态下拉菜单(补充 设置默认值)
下一篇: ajax实现登录
陈卿诺语
博客等级 码龄5年 167粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值