这段代码用于防止用户点“提交”按钮后点了刷新导致重复提交post请求。思路是写session,根据每次Session不同判断是不是重复提交。
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="重复提交.aspx.cs" Inherits="重复提交" %> 2 3 4 5 6 718 198 9 10
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 public partial class 重复提交 : System.Web.UI.Page 9 { 10 //在页面第一次加载时执行这句,点刷新时不执行这句11 protected void Page_Load(object sender, EventArgs e) 12 { 13 Response.Buffer = true; 14 //如果Session的Token为空15 if (Session["Token"] == null) 16 { 17 //给Session赋新值执行完毕后, 18 //在aspx中由value="<%=GetSessionToken() %>把取得的Session放在隐藏域19 SetToken(); 20 } 21 } 22 23 //当点击按钮发送post请求时24 protected void Button1_Click(object sender, EventArgs e) 25 { 26 //判断GetSessionToken拿到的当前Session是否和隐藏域中的Session相等27 if (Request.Form["hiddenTestN"].ToString().Equals((GetSessionToken()))) 28 { 29 //如果相等,则页面没有刷新,是正常提交,就把用户输入响应到屏幕,并提交入库30 string txt = this.TextBox1.Text; 31 Response.Write(txt+"提交入库!"); 32 } 33 //如果不相等,说明页面刷新了,则不执行提交操作34 else 35 { 36 Response.Write("这次是重复提交post请求!"); 37 } 38 39 //给Session赋新的值,提交后刷新时也发送了post请求, 40 //所以要在非重复提交成功后改变Session41 SetToken(); 42 } 43 44 //获得Session里的数据45 protected string GetSessionToken() 46 { 47 //如果Session不为空48 if (Session["Token"] != null) 49 { 50 //返回Session当前值51 return Session["Token"].ToString(); 52 } 53 else 54 { 55 //否则返回空串56 return ""; 57 } 58 } 59 60 //给Session赋值61 protected void SetToken() 62 { 63 Session.Add("Token", Session.SessionID + DateTime.Now.Ticks.ToString()); 64 } 65 66 }