防止用户不断刷新和重复提交

来源:互联网 发布:淘宝账号等级查询 编辑:程序博客网 时间:2024/04/30 03:05
防止用户不断刷新和重复提交的实现原理和代码:
1、原理:session防止用户重复提交的实现原理,当用户首次提交时,把提交的时间写入session,当用户不断刷新或提交时,与写入session时间进行比对,若小于N秒时,说明用户是不断刷新或重复提交。
2、代码,前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>防止用户不断刷新和重复提交</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        session防止用户重复提交的实现原理,当用户首次提交时,把提交的时间写入session,当用户不断刷新或提交时,<br />
        与写入session时间进行比对,若小于N秒时,说明用户是不断刷新或重复提交。<br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" Style="height: 21px" />
        <asp:Button ID="Button2" runat="server" Text="clear_sesion" OnClick="Button2_Click" />
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
    </form>
</body>
</html>
  后台代码:
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //当session为null时,说明该用户是第一次提交,可以直接提交A方法里的数据
        if (Session["data"] == null)
        {
            //模式从页面上获取文本框架的数据提交到数据库
            A(0);
            //数据提交到数据库后,把到前时间写到session里
            Session["data"] = DateTime.Now.ToString();
        }
        else
        {
            //获取session里面的时间
            DateTime date = Convert.ToDateTime(Session["data"].ToString());
            //获取当前的时间的毫秒数
            int spanc = (int)(DateTime.Now - date).TotalMilliseconds;
            //如果当两次提交同一表单的间隔时间的小于3秒,认定为重复提交
            if (spanc < 3 * 1000)
            {
                //提醒用户重复提交
                Response.Write("重复提交");
            }
            else
            {
                //否则允许用户提交
                A(spanc);
            }
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        //清除所有session
        Session.Clear();
    }
    protected void A(int spanc)
    {
        String str = Session["str"] == null ? TextBox1.Text + DateTime.Now.ToString() : Session["str"].ToString() + TextBox1.Text + DateTime.Now.ToString() + ":" + spanc + "</br>";
        Session["str"] = str;
        Label1.Text = Session["str"].ToString();
    }
}