Elijah

治愈系代码研究基地
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[传智播客学习日记]防止刷新重复提交post请求

Posted on 2011-12-23 15:09  Elijah  阅读(2618)  评论(1编辑  收藏  举报

这段代码用于防止用户点“提交”按钮后点了刷新导致重复提交post请求。思路是写session,根据每次Session不同判断是不是重复提交。

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="重复提交.aspx.cs" Inherits="重复提交" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6 <head id="Head1" runat="server">
7 <title></title>
8 </head>
9 <body>
10 <form id="form1" runat="server">
11 <div>
12 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
13 <!--在隐藏域当中保存当前的Session中的Token值-->
14 <input type="hidden" id="hiddenTest" name="hiddenTestN" value="<%=GetSessionToken() %>" />
15 <asp:Button ID="Button1" runat="server" Text="注册" onclick="Button1_Click" />
16 </div>
17 </form>
18 </body>
19 </html>
 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 //所以要在非重复提交成功后改变Session
41 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 }