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

    小结

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

  • 相关阅读:
    如何利用UltraEdit语法着色来编辑shell脚本
    css 运动背景
    页面加载进度条
    jScrollPane滚动条
    页面加载进度条改进版
    js页面新消息提示
    一道题
    jquery插件 展示信息
    冒泡排序和快速排序
    字体背景
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/7498348.html
Copyright © 2011-2022 走看看