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的值相同,告知用户提交失败,为重复提交表单
    }
  • 相关阅读:
    贫血模型和充血模型
    DES加密解密
    DDD讀書筆記(四)
    HTTP Caching
    ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
    datalist用aspnetpager分页
    visual studio.net 快捷键[转]
    DataList分页方法
    C#连接各类数据库 [转]
    C#日期函数[转]
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522587.html
Copyright © 2011-2022 走看看