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 "添加";
    
                }
    
            }

    小结

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

  • 相关阅读:
    Spinlock
    Leetcode: Summary Ranges
    Leetcode: Search a 2D Matrix
    Leetcode: Rotate Image
    Leetcode: Length of Last Word in python
    BBC-unit7 session1
    BBC-unit6 session5
    BBC-unit6 session4
    BBC英语-unit6 session3
    BBC英语-unit6 session2
  • 原文地址:https://www.cnblogs.com/Zhangqwr/p/7657082.html
Copyright © 2011-2022 走看看