zoukankan      html  css  js  c++  java
  • 防止表单重复提交

    引言

    表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:
    点击提交按钮两次。
    点击刷新按钮。
    使用浏览器后退按钮重复之前的操作,导致重复提交表单。

    如何解决?

    通过创建令牌,验证,销毁。来避免一个令牌,产出多次表单提交。

    1.令牌函数

    //创建TOKEN
    function create_token() {
        $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE));
        // 加密
        $token = md5("ADMIN" . substr(md5($code), 8, 10));
    
        session('TOKEN', $token);
    }
    
    //判断TOKEN
    function check_token($token) {
        if ($token == session('TOKEN')) {
            session('TOKEN', NULL);
            return TRUE;
        } else {
            return FALSE;
        }
    }
    

    2.在页面出现前,创建令牌

    // 创建令牌,防止表单重复提交
    create_token();
    return $this->fetch();

    3.在表单中,加入令牌,并赋值

    <input type="hidden" name="TOKEN" value="{:session('TOKEN')}">

    4.提交表单后验证令牌

            if (request()->isPost()) {
                if (!check_token($_POST['TOKEN'])) {
                    $this->redirect('LiveExtra/bannerList');
                    return;
                }
    
    
                if (input('?post.id')) {
                    // 编辑
    
                    return "编辑";
                } else {
                    // 添加
    
                    return "添加";
    
                }
    
            }

    小结

    通过唯一的令牌机制,可以避免表单重复提交的问题。如果数据很重要的时候,可以这样处理。

  • 相关阅读:
    js深拷贝和浅拷贝
    Entity Framework在WCF中序列化的问题
    EF Code First学习笔记:数据库创建
    Entity Framework Code First级联删除
    EF Code First 学习笔记:表映射
    Func与Action
    jsp/servlet页面跳转丢失样式问题
    Tomcat中配置URIEncoding="UTF-8"来处理中文的方法
    Android studio 自动导入(全部)包 import
    LInux系统配置
  • 原文地址:https://www.cnblogs.com/Zhangqwr/p/7657082.html
Copyright © 2011-2022 走看看