伸进女同桌乳沟里摸爽了,小雪解开乳罩给老杨摸,少妇被按摩师摸高潮了,亲嘴扒胸摸屁股激烈视频,强摸秘书人妻大乳BD,摸BBB揉BBB揉BBB视频

新疆軟件開發(fā)

本站首頁(yè) 軟件開發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語(yǔ)言 >> 文章正文

搜集整理的asp.net的驗(yàn)證方式大全session

   搜集整理了一篇關(guān)于.net驗(yàn)證方式的文章,大家看看。
   此前我介紹了使用數(shù)據(jù)庫(kù)實(shí)現(xiàn)的提交驗(yàn)證方案,一些朋友懷疑其效率不佳,認(rèn)為Session是更好的方案。

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

/// <summary>

/// 驗(yàn)證信息表

/// </summary>

static Hashtable 驗(yàn)證信息

{

    get

    {

        return Core.函數(shù)庫(kù).網(wǎng)絡(luò).Session["驗(yàn)證信息"] as Hashtable;

    }

    set

    {

        Core.函數(shù)庫(kù).網(wǎng)絡(luò).Session["驗(yàn)證信息"] = value;

    }

}

清理方法,用于將過(guò)期的數(shù)據(jù)清除:
/// <summary>
/// 清理所有過(guò)期的驗(yàn)證信息

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

{

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

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

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

    }

}

小于5條驗(yàn)證信息則忽略。

克隆一個(gè)驗(yàn)證信息表供foreach使用,如果使用原表循環(huán)的話,直接移除內(nèi)容會(huì)改變表長(zhǎng)度,從而引發(fā)異常。

添加方法:

/// <summary>

/// 添加一個(gè)新的驗(yàn)證信息。

/// </summary>

/// <param name="驗(yàn)證碼">要保存的驗(yàn)證碼</param>

/// <param name="過(guò)期時(shí)間差值">用于計(jì)算過(guò)期時(shí)間,單位為分鐘</param>

/// <returns>過(guò)期時(shí)間戳</returns>

public static DateTime 添加(string 驗(yàn)證碼, byte 過(guò)期時(shí)間差值)

{

    清理();

    var 過(guò)期時(shí)間 = DateTime.Now.AddMinutes(過(guò)期時(shí)間差值);

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

    驗(yàn)證信息.Add(過(guò)期時(shí)間, 驗(yàn)證碼);

    return 過(guò)期時(shí)間;

}

在添加前進(jìn)行過(guò)期信息清理工作。
獲取、驗(yàn)證、移除方法:
/// <summary>
/// 根據(jù)過(guò)期時(shí)間戳獲取對(duì)應(yīng)的驗(yàn)證碼
/// </summary>
/// <param name="過(guò)期時(shí)間戳">驗(yàn)證信息過(guò)期時(shí)間戳</param>
/// <returns>驗(yàn)證碼明文</returns>
public static string 獲取(DateTime 過(guò)期時(shí)間戳)

{

    return 驗(yàn)證信息[過(guò)期時(shí)間戳] as string;

}

 

/// <summary>

/// 驗(yàn)證用戶輸入的驗(yàn)證碼是否正確

/// </summary>

/// <param name="過(guò)期時(shí)間戳">驗(yàn)證信息過(guò)期時(shí)間戳</param>

/// <param name="驗(yàn)證碼">用戶輸入的驗(yàn)證碼</param>

/// <returns>返回錯(cuò)誤信息,如驗(yàn)證成功則返回null</returns>

public static string 驗(yàn)證(DateTime 過(guò)期時(shí)間戳, string 驗(yàn)證碼)

{
    if (過(guò)期時(shí)間戳 < DateTime.Now) return "驗(yàn)證信息已過(guò)期";

    var 驗(yàn)證碼明文 = 獲取(過(guò)期時(shí)間戳);

    if (驗(yàn)證碼明文 == null) return "驗(yàn)證信息無(wú)效或已過(guò)期";

    else if (驗(yàn)證碼明文.ToLower() != 驗(yàn)證碼.ToLower()) return "驗(yàn)證碼錯(cuò)誤";

    else return null;

}


/// <summary>
/// 根據(jù)過(guò)期時(shí)間戳移除對(duì)應(yīng)的驗(yàn)證信息
/// </summary>

/// <param name="過(guò)期時(shí)間戳">驗(yàn)證信息過(guò)期時(shí)間戳</param>
public static void 移除(DateTime 過(guò)期時(shí)間戳)

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

public DateTime? 時(shí)間戳

{
   get

    {
        return ViewState["時(shí)間戳"] as DateTime?;

    }
    set
    {
        ViewState["時(shí)間戳"] = value;
    }
}

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

{

    if (!IsPostBack)

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

}

(無(wú)參數(shù)的“添加”方法是我實(shí)現(xiàn)的一個(gè)適配器封裝方法,采用默認(rèn)的過(guò)期時(shí)間設(shè)置,隨機(jī)生成驗(yàn)證碼)

提交時(shí)的調(diào)用:

protected void Button1_Click(object sender, EventArgs e)

{
    var s = 提交驗(yàn)證.驗(yàn)證(時(shí)間戳.Value, TextBox1.Text);

    if (s == null)

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

    }
    else

    {
        CustomValidator1.IsValid = false;

        CustomValidator1.ErrorMessage = s;

    }

}


 

作者:斯克迪亞 | 文章來(lái)源:cnblogs | 更新時(shí)間:2008-10-21 22:51:58

  • 上一篇文章:

  • 下一篇文章: 沒有了

  • 相關(guān)文章:
    asp,net軟件結(jié)構(gòu)設(shè)計(jì)和相關(guān)的安全性問題
    如何解決Menu菜單被frame遮擋以及iframe自適應(yīng)的問題
    Orcale與Asp.net的端口沖突解決方法
    Session保存在SqlServer中可實(shí)現(xiàn)
    如何利用SQL Server進(jìn)行會(huì)話狀態(tài)session的保持
    ASP.NET 2.0之Memebership擴(kuò)展應(yīng)用解決方案
    數(shù)據(jù)庫(kù)設(shè)計(jì)-數(shù)據(jù)庫(kù)的三級(jí)模式
    ASP.NET中如何使用unsafe選項(xiàng)
    三個(gè)視圖搞定SqlServer數(shù)據(jù)庫(kù)字典
    深入了解數(shù)據(jù)源控件Data Souce controls
    軟件技術(shù)
    · 開發(fā)語(yǔ)言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫(kù)開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗(yàn)證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項(xiàng)目開發(fā)中應(yīng)該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項(xiàng)目經(jīng)理有那些
    ·學(xué)習(xí)如何在Lambda表達(dá)式進(jìn)
    ·C++基礎(chǔ)知識(shí):結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實(shí)現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補(bǔ)了一部分java的
    ·rss定制的另外一種實(shí)現(xiàn)方式
    ·delphi實(shí)現(xiàn)利用arp欺騙來(lái)實(shí)
    ·基礎(chǔ)學(xué)習(xí):基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過(guò)程中的性能設(shè)計(jì)
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.zgna.net All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    天柱县| 南部县| 巨鹿县| 桂东县| 美姑县| 桃源县| 万年县| 荃湾区| 浙江省| 奉节县| 灵丘县| 淮南市| 广灵县| 平邑县| 民勤县| 信丰县| 铜川市| 宜州市| 庆阳市| 西乡县| 武功县| 习水县| 长泰县| 钟祥市| 宾川县| 东光县| 柳江县| 治多县| 右玉县| 兴国县| 南京市| 山东| 枝江市| 车险| 满洲里市| 宜君县| 岢岚县| 韶关市| 黄浦区| 金秀| 伊宁县|