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的值相同,告知用户提交失败,为重复提交表单
    }
  • 相关阅读:
    IE8中li添加float属性,中英数字混合BUG
    jQuery ajax get与post后台交互中的奥秘
    BZOJ 4816 数字表格
    BZOJ 1598 牛跑步
    BZOJ 4077 Messenger
    相关分析 BZOJ 4821
    Crash的数字表格 BZOJ 2154 / jzptab BZOJ 2693
    回文串 BZOJ 3676
    古代猪文 BZOJ 1951
    树上的路径 BZOJ 3784
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522587.html
Copyright © 2011-2022 走看看