<rp id="l2es4"><acronym id="l2es4"></acronym></rp><dd id="l2es4"><pre id="l2es4"></pre></dd>
<button id="l2es4"><object id="l2es4"><cite id="l2es4"></cite></object></button>

<form id="l2es4"><tr id="l2es4"></tr></form>

  • 
    
        1. 新疆軟件開發

          本站首頁 軟件開發 成功案例 公司新聞 公司簡介 客服中心 軟件技術 網站建設
            您現在的位置: 新疆二域軟件開發公司 >> 開發語言 >> 文章正文

          搜集整理的asp.net的驗證方式大全session

             搜集整理了一篇關于.net驗證方式的文章,大家看看。
             此前我介紹了使用數據庫實現的提交驗證方案,一些朋友懷疑其效率不佳,認為Session是更好的方案。

          的確使用Session也不會消耗太多內存,而且如今內存白菜價,最不濟就隨手買個2G的插上也就夠了,所以我將在此寫下Session版的實現提要,其余細節參考前篇。
          實現方案簡述:
          在Session中存儲一個哈希表用以記錄該用戶的每一條驗證信息,哈希表的鍵為驗證信息的過期時間,值為驗證碼的明文。
          過期時間使用ViewState存儲,以發給客戶端,并在提交時獲取,以讀取對應的驗證碼明文。
          傳給驗證碼生成頁面的ID參數是經ToFileTime()方法轉換的過期時間,驗證碼生成頁獲取到此參數后進行逆轉換,再讀取對應的驗證碼明文以生成顯示。
          代碼講解:
          先建立一個靜態類,名為“提交驗證”,將用于存儲驗證信息的Session變量封裝為一個屬性:

          /// <summary>

          /// 驗證信息表

          /// </summary>

          static Hashtable 驗證信息

          {

              get

              {

                  return Core.函數庫.網絡.Session["驗證信息"] as Hashtable;

              }

              set

              {

                  Core.函數庫.網絡.Session["驗證信息"] = value;

              }

          }

          清理方法,用于將過期的數據清除:
          /// <summary>
          /// 清理所有過期的驗證信息

          /// </summary>
          public static void 清理()

          {

              if (驗證信息 == null || 驗證信息.Count < 5) return;

              foreach (DictionaryEntry f in (Hashtable)驗證信息.Clone())

              {
                  if ((DateTime)f.Key < DateTime.Now) 驗證信息.Remove(f);

              }

          }

          小于5條驗證信息則忽略。

          克隆一個驗證信息表供foreach使用,如果使用原表循環的話,直接移除內容會改變表長度,從而引發異常。

          添加方法:

          /// <summary>

          /// 添加一個新的驗證信息。

          /// </summary>

          /// <param name="驗證碼">要保存的驗證碼</param>

          /// <param name="過期時間差值">用于計算過期時間,單位為分鐘</param>

          /// <returns>過期時間戳</returns>

          public static DateTime 添加(string 驗證碼, byte 過期時間差值)

          {

              清理();

              var 過期時間 = DateTime.Now.AddMinutes(過期時間差值);

              if (驗證信息 == null) 驗證信息 = new Hashtable();

              驗證信息.Add(過期時間, 驗證碼);

              return 過期時間;

          }

          在添加前進行過期信息清理工作。
          獲取、驗證、移除方法:
          /// <summary>
          /// 根據過期時間戳獲取對應的驗證碼
          /// </summary>
          /// <param name="過期時間戳">驗證信息過期時間戳</param>
          /// <returns>驗證碼明文</returns>
          public static string 獲取(DateTime 過期時間戳)

          {

              return 驗證信息[過期時間戳] as string;

          }

           

          /// <summary>

          /// 驗證用戶輸入的驗證碼是否正確

          /// </summary>

          /// <param name="過期時間戳">驗證信息過期時間戳</param>

          /// <param name="驗證碼">用戶輸入的驗證碼</param>

          /// <returns>返回錯誤信息,如驗證成功則返回null</returns>

          public static string 驗證(DateTime 過期時間戳, string 驗證碼)

          {
              if (過期時間戳 < DateTime.Now) return "驗證信息已過期";

              var 驗證碼明文 = 獲取(過期時間戳);

              if (驗證碼明文 == null) return "驗證信息無效或已過期";

              else if (驗證碼明文.ToLower() != 驗證碼.ToLower()) return "驗證碼錯誤";

              else return null;

          }


          /// <summary>
          /// 根據過期時間戳移除對應的驗證信息
          /// </summary>

          /// <param name="過期時間戳">驗證信息過期時間戳</param>
          public static void 移除(DateTime 過期時間戳)

          {
              驗證信息.Remove(過期時間戳);
          }
          使用方法:
          使用時在頁面上封裝一個基于ViewState屬性:
          /// <summary>
          /// 時間戳屬性,基于ViewState
          /// </summary>

          public DateTime? 時間戳

          {
             get

              {
                  return ViewState["時間戳"] as DateTime?;

              }
              set
              {
                  ViewState["時間戳"] = value;
              }
          }

          然后在load事件中調用:
          protected void Page_Load(object sender, EventArgs e)

          {

              if (!IsPostBack)

              {
                  時間戳 = 提交驗證.添加();
                  Image1.ImageUrl = "~/VerifyImage.aspx?ID=" + 時間戳.Value.ToFileTime();
              }

          }

          (無參數的“添加”方法是我實現的一個適配器封裝方法,采用默認的過期時間設置,隨機生成驗證碼)

          提交時的調用:

          protected void Button1_Click(object sender, EventArgs e)

          {
              var s = 提交驗證.驗證(時間戳.Value, TextBox1.Text);

              if (s == null)

              {
                  CustomValidator1.IsValid = true;
                  //提交...
                  提交驗證.移除(時間戳.Value);

              }
              else

              {
                  CustomValidator1.IsValid = false;

                  CustomValidator1.ErrorMessage = s;

              }

          }


           

          作者:斯克迪亞 | 文章來源:cnblogs | 更新時間:2008-10-21 22:51:58

        2. 上一篇文章:

        3. 下一篇文章: 沒有了

        4. 相關文章:
          asp,net軟件結構設計和相關的安全性問題
          如何解決Menu菜單被frame遮擋以及iframe自適應的問題
          Orcale與Asp.net的端口沖突解決方法
          Session保存在SqlServer中可實現
          如何利用SQL Server進行會話狀態session的保持
          ASP.NET 2.0之Memebership擴展應用解決方案
          數據庫設計-數據庫的三級模式
          ASP.NET中如何使用unsafe選項
          三個視圖搞定SqlServer數據庫字典
          深入了解數據源控件Data Souce controls
          軟件技術
          · 開發語言
          · Java技術
          · .Net技術
          · 數據庫開發
          最新文章  
          ·搜集整理的asp.net的驗證方
          ·各種FOR循環結構的整理
          ·軟件項目開發中應該考慮那
          ·搜集整理的javascript sel
          ·軟件開發中項目經理有那些
          ·學習如何在Lambda表達式進
          ·C++基礎知識:結構體數據的
          ·C#實現短信發送程序的例子
          ·sun最近修補了一部分java的
          ·rss定制的另外一種實現方式
          ·delphi實現利用arp欺騙來實
          ·基礎學習:基于WF的流程框
          ·網絡編程中怎樣得知一次數
          ·如何逆序輸出單鏈表?
          ·軟件開發過程中的性能設計
          關于我們 | 軟件開發 | 下載試用 | 客服中心 | 聯系我們 | 友情鏈接 | 網站地圖 | 新疆電子地圖 | RSS訂閱
          版權所有 © 2016 新疆二域軟件開發網 www.ayxjs.cn All Rights Reserved 新ICP備14003571號
          新疆軟件開發總機:0991-4842803、4811639.
          客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯大廈A-5C 郵編:830000
           
          精品亚洲av乱码一区二区三区 - av网站大全 - 久久精品国产亚洲av高清热 - 厨房里强摁做开腿呻吟
          <rp id="l2es4"><acronym id="l2es4"></acronym></rp><dd id="l2es4"><pre id="l2es4"></pre></dd>
          <button id="l2es4"><object id="l2es4"><cite id="l2es4"></cite></object></button>

          <form id="l2es4"><tr id="l2es4"></tr></form>

        5.