亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET中防止頁面刷新造成表單重復提交執行兩次操作

2024-07-10 13:30:09
字體:
來源:轉載
供稿:網友
本文主要介紹在Session存儲唯一標識Token,通過和后臺對比,以實現防止刷新提交表單的問題。
 

之前看過別人防刷新的方法,是讓頁面刷新或返回上一步讓頁面過期,這里介紹一種另類的方法,使用Session來處理。

實現原理:

由于刷新提交表單,實際上提交的就是上一次正常提交的表單,所以我們只要做一個標志,判斷出是新表單還是上一次的舊表單就可以分辨出是否進行了重復提交操作。

實現方法:

在頁面上放置一個Hidden域,當頁面第一次載入的時候,在Session里面保存一個標志,同時,把這個標志保存到頁面上的Hidden里面。在提交表單時,判斷表單中提交上來的Hidden和Session中的標志是否一致,就可以知道是正常的提交表單,還是刷新頁面導致的重復提交。需要注意的是,在每次提交表單的處理之后,要更新Session里面的標志。

代碼實例:代碼很少,首先是頁面上。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Test.Web.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 id="Head1" runat="server">  <title></title></head><body>  <form id="form1" runat="server">  <div>    <input type="text" id="tbxName" runat="server" />    <input type="text" id="tbxPass" value="" runat="server" />    <asp:Button ID="btnSubmit" runat="server" OnClick="Button1_Click" Text="Button" />    <asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>    <input id="hiddenTest" type="hidden" value="<%= GetToken() %>" name="hiddenTestN" />  </div>  </form></body></html>

 

需要注意的地方:

  1 GetToken()函數是為了獲得 Session里面保存的標志。
  2 Hidden使用了非服務器控件,這是因為我使用服務器控件,并在后臺直接獲取Session的標志并賦值給這個Hidden的時候,刷新提交到服務器的 表單中的Hidden的值也發生了改變,猜想是服務器控件的話,表單里面的值是保持同步的,當然,也可能是我用的方法不對,嘎嘎。

下面是后臺代碼:

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Security.Cryptography;using System.Text;namespace Test.Web{  public partial class Default : System.Web.UI.Page  {    protected void Page_Load(object sender, EventArgs e)    {      //第一次載入的時候,生成一個初始的標志      if (null == Session["Token"])      {        SetToken();      }    }    protected void Button1_Click(object sender, EventArgs e)    {      if (Request.Form.Get("hiddenTestN").Equals(GetToken()))      {        lblMessage.ForeColor = System.Drawing.Color.Blue;        lblMessage.Text = "正常提交表單";        SetToken();//別忘了最后要更新Session中的標志      }      else      {        lblMessage.ForeColor = System.Drawing.Color.Red;        lblMessage.Text = "刷新提交表單";      }    }    //獲得當前Session里保存的標志    public string GetToken()    {      if (null != Session["Token"])      {        return Session["Token"].ToString();      }      else      {        return string.Empty;      }    }    //生成標志,并保存到Session    private void SetToken()    {      Session.Add("Token", UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));    }    //這個函數純粹是為了讓標志稍微短點兒,一堆亂碼還特有神秘感,另外,這個UserMd5函數是網上找來的現成兒的    protected string UserMd5(string str1)    {      string cl1 = str1;      string pwd = "";      MD5 md5 = MD5.Create();      // 加密后是一個字節類型的數組      byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));      // 通過使用循環,將字節類型的數組轉換為字符串,此字符串 是常規字符格式化所得      for (int i = 0; i < s.Length; i++)      {        // 將得到的字符串使用十六進制類型格式。格式后的字符是 小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符        pwd = pwd + s[i].ToString("X");      }      return pwd;    }  }}

需要注意的地方:

    1 在頁面第一次載入的時候要生成標志,以后就不用了。
    2 在表單處理的函數的最后,記得要更新標志。
    3 標志我選用了當前SessionID加上當前時間毫秒值,這樣基本可以避免標志重復,之后進行了一次MD5,純粹為了讓標志短點兒,當然有一點點安全的意 思,哈哈。
所有代碼就是這些,很簡單,不知道是因為太簡單還是大家有更好的方法,我在網上沒有找到類似的代碼,所以寫下來和大家分享,如果有更好的方法,希望可以告訴我,因為好久不做Web開發了,怕是有很多新技術都不會了。



注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩高清电影好看的电视剧电影| 国产精品高潮粉嫩av| 日韩av在线影视| 91天堂在线视频| 在线播放国产一区二区三区| 国产精品日韩久久久久| 欧美日韩裸体免费视频| 中文字幕国内精品| 国产精品免费一区| 欧美日韩免费一区| 久久国产精品免费视频| 亚洲白拍色综合图区| 日韩欧美有码在线| 国产国语videosex另类| 色综合久久天天综线观看| 最近2019中文字幕第三页视频| 国产精品福利在线观看| 在线观看视频亚洲| 精品福利一区二区| 日韩视频中文字幕| 久久夜精品va视频免费观看| 日本韩国在线不卡| 中文字幕日韩精品有码视频| 国产成人精品国内自产拍免费看| 亚洲a级在线观看| 久久免费视频这里只有精品| 另类美女黄大片| 亚洲国产欧美一区| 日韩av电影手机在线| 欧美一二三视频| 美女精品久久久| 国产精品久久久久久久久久久新郎| 亚洲第一网站男人都懂| 久久久久国产精品www| 国产日产欧美精品| www国产精品视频| 国产香蕉97碰碰久久人人| 欧美精品久久一区二区| 欧美精品aaa| 欧美精品在线免费观看| 亚洲色图五月天| 欧美与欧洲交xxxx免费观看| 日本欧美国产在线| 欧美电影免费观看网站| 国产精品久久久久av| 日韩日本欧美亚洲| 午夜欧美不卡精品aaaaa| 国产精品人成电影在线观看| 色午夜这里只有精品| 欧美在线视频导航| 日韩美女在线观看一区| 国模吧一区二区| 国产一区二区三区在线观看网站| 午夜精品久久久久久久男人的天堂| 国产精品黄视频| 久久频这里精品99香蕉| 国产噜噜噜噜久久久久久久久| 国产精品日韩在线一区| 欧美日韩精品在线播放| 欧美性生交xxxxx久久久| 久久中文字幕国产| 日韩在线观看网址| 亚洲肉体裸体xxxx137| 亚洲色图激情小说| 性亚洲最疯狂xxxx高清| 国产精品久久久久久久久久| 成人免费网站在线观看| 国产亚洲欧美日韩精品| 成人国产精品免费视频| 国产日韩av在线| 国产在线精品播放| 国产一区二区三区直播精品电影| 国产综合在线视频| 久久成人精品电影| 亚洲午夜久久久久久久| 在线免费观看羞羞视频一区二区| 国产成人激情视频| 色伦专区97中文字幕| 国产成人精品日本亚洲专区61| 午夜精品福利视频| 欧美日韩中文在线| 欧美精品福利在线| 中文字幕在线观看亚洲| 亚洲天堂开心观看| 欧美性猛交xxxx乱大交| 国内精品视频在线| 自拍偷拍亚洲精品| 97久久精品视频| 亚洲最大福利视频网站| xxav国产精品美女主播| 欧美日韩国产精品一区| 欧美成人黑人xx视频免费观看| 国产精品自在线| 国产成人精品久久久| 亚洲国产欧美一区二区丝袜黑人| 亚洲欧美另类人妖| 久久天天躁狠狠躁夜夜躁2014| 精品视频久久久| 热re91久久精品国99热蜜臀| 亚洲少妇中文在线| 久久免费国产视频| 久久久久久国产精品| 亚洲综合最新在线| 国产精品自拍视频| 欧美日韩成人黄色| 中文字幕九色91在线| 高清欧美电影在线| 欧美日韩电影在线观看| 91国偷自产一区二区三区的观看方式| 国产精品国内视频| 日韩激情av在线免费观看| 亚洲影视中文字幕| 欧美午夜影院在线视频| 国产在线精品一区免费香蕉| 亚洲精品电影网| 亚洲性猛交xxxxwww| 亚洲国产成人在线视频| 亚洲最大成人在线| 中文字幕亚洲色图| 日韩视频―中文字幕| 亚洲欧美日韩一区在线| 91国产精品电影| 色综合天天狠天天透天天伊人| 日韩av在线免费观看一区| 欧美精品在线第一页| 欧美成人性生活| 欧美激情视频一区二区三区不卡| 夜夜嗨av色综合久久久综合网| 日韩欧美视频一区二区三区| 最近2019中文字幕mv免费看| 国产精品入口尤物| 日韩视频―中文字幕| 亚洲欧美成人在线| 欧美精品一二区| 不卡av在线网站| 欧美午夜激情在线| 国产成人一区二区三区| 久久久伊人欧美| 欧美日韩精品在线观看| 国产91色在线免费| 日韩中文字幕视频| 日韩成人在线视频| 久久人人看视频| 欧美激情免费看| 久久久人成影片一区二区三区| 色综合天天狠天天透天天伊人| 成人免费观看49www在线观看| 国产精品久久久久久久久久久久久| 日本高清视频精品| 2021国产精品视频| 久久综合亚洲社区| 欧美电影在线观看高清| 亚洲一级一级97网| 久久久精品亚洲| 亚洲专区中文字幕| 91精品久久久久久久久久入口| 亚洲美女精品成人在线视频| 精品无人国产偷自产在线| 精品毛片三在线观看| 欧美丰满老妇厨房牲生活| 国产香蕉一区二区三区在线视频| 欧美精品久久久久久久免费观看| 777午夜精品福利在线观看| 国产精品网站视频|