zoukankan      html  css  js  c++  java
  • [传智播客学习日记]防止刷新重复提交post请求

    这段代码用于防止用户点“提交”按钮后点了刷新导致重复提交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 }



  • 相关阅读:
    HDU 6034
    HDU 6047
    CodeForces 830B
    HDU 4972
    HDU 4408
    CodeForces 788B
    CodeForces 788A
    CodeForces 792C
    uva 1658 Admiral 最小费最大流
    hdu 5391 Zball in Tina Town 威尔逊定理
  • 原文地址:https://www.cnblogs.com/Elijah/p/2299496.html
Copyright © 2011-2022 走看看