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

    在生成表单的时候,为防止表单重复提交。在form表单中添加一个隐藏的input标签来存放令牌,等到提交的时候,和表单一起提交。提交以后和生成的session值作比较,通过这种方式来达到防止重复提交的目的。

    session方法

    <?php
    
    if ($_POST) {
        if ($_SESSION['token']!=$_POST['token']) {
            die('非法提交');
        } else {
            die('安全提交');
        }
    }
    // 每生成一次表单,修改一次值,不要在POST处理前修改它,不然无法比对
    $_SESSION['token'] = md5(rand(1,999));
    
    ?>
    
    <form action="" method="post">
        <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
        <input type="submit" value="提交">
    </form>

    cookie+md5方法

    $value = $_COOKIE['value']; // 读取上一次设置的Cookie值
    
    if(count($_POST)) {
        $long = '';
        while(list($key,$value)=each($_POST)) $long.=$value;
        $hash = md5($long);
        setcookie('value',$hash,time()+60*60); // 重新设置cookie
    }
    
    if$value!=$hash) {
        // 如果两次的MD5值不一样就对数据进行进一步操作
    } else {
        // 如果两次MD5的值相同,告知用户提交失败,为重复提交表单
    }
  • 相关阅读:
    sql中触发器的使用
    sql中优化查询
    sql中case when语句的使用
    CSRF学习小结
    javascript正则表达式笔记
    elementUI单选框获取值
    elementUI内置过渡(折叠)
    elementUI内置缩放过渡(缩放)
    elementUi内置过渡动画(淡入)
    创建koa2项目
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522587.html
Copyright © 2011-2022 走看看