巧用ASP.NET Cookie
先看一看cookie學(xué)習(xí)圖,看一看學(xué)什么?

一、Cookie是什么
Cookie是一小段文本信息,存在客戶(hù)端硬盤(pán)上的長(zhǎng)度不超過(guò)4KB的文本文件。
伴隨著用戶(hù)請(qǐng)求和頁(yè)面在Web服務(wù)器和瀏覽器之間傳遞
用戶(hù)每次訪問(wèn)站點(diǎn)時(shí),Web應(yīng)用程序都可以讀取Cookie包含的信息。
二、工作原理
由于HTTP是一種無(wú)狀態(tài)的協(xié)議,服務(wù)器單從網(wǎng)絡(luò)連接上無(wú)從知道客戶(hù)身份。怎么辦呢?就給客戶(hù)端們頒發(fā)一個(gè)通行證吧,每人一個(gè),無(wú)論誰(shuí)訪問(wèn)都必須攜帶自己通行證。這樣服務(wù)器就能從通行證上確認(rèn)客戶(hù)身份了。這就是Cookie的工作原理。
Cookie實(shí)際上是一小段的文本信息??蛻?hù)端請(qǐng)求服務(wù)器,如果服務(wù)器需要記錄該用戶(hù)狀態(tài),就使用response向客戶(hù)端瀏覽器頒發(fā)一個(gè)Cookie??蛻?hù)端瀏覽器會(huì)把Cookie保存起來(lái)。當(dāng)瀏覽器再請(qǐng)求該網(wǎng)站時(shí),瀏覽器把請(qǐng)求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來(lái)辨認(rèn)用戶(hù)狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。

三、Cookie對(duì)象的屬性和方法
屬性:
(1).Name:獲取或設(shè)置Cookie的名稱(chēng)
(2).Value:獲取或設(shè)置Cookie的值
(3).Expires:獲取或設(shè)置Cookie的過(guò)期時(shí)間
(4).Version:獲取或設(shè)置Cookie的符合HTTP維護(hù)狀態(tài)的版本
方法:
(1).Add:增加Cookie變量,將指定的cookie保存到Cookies集合中
(2).Clear:清除Cookie集合中變量
(3).Get:通過(guò)變量名或索引得到Cookie變量的值
(4).Remove:通過(guò)Cookie變量名或索引刪除Cookie對(duì)象
四、優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
相比Session和Application對(duì)象,使用Cookie能持久化保存用戶(hù)信息。Cookie保存在客戶(hù)端,而Session和Application保存在服務(wù)器端,故Cookie能長(zhǎng)久保存。web應(yīng)用程序可以通過(guò)獲取客戶(hù)端的Cookie來(lái)進(jìn)行用戶(hù)身份認(rèn)證。
Asp.net包含兩個(gè)Cookie集合,通過(guò)HttpRequest的Cookie集合進(jìn)行訪問(wèn),Cookie不是Page類(lèi)的子類(lèi),所以使用方法與Session和Application不同,相比于他們Cookie的優(yōu)點(diǎn)如下:
1.可以配置過(guò)期時(shí)間
2.簡(jiǎn)單:Cookie是一種基于文本的輕量級(jí)結(jié)構(gòu),包括簡(jiǎn)單的鍵值對(duì)
3.數(shù)據(jù)持久:因?yàn)楸4娴娇蛻?hù)端
4.無(wú)任何服務(wù)器資源:因?yàn)榇鎯?chǔ)在本地客戶(hù)端
缺點(diǎn)如下:
1.大小限制:
2.不確定性:可能用戶(hù)刪除Cookie或者禁用
3.安全風(fēng)險(xiǎn):可偽造修改
五、注意什么?
[1].使用Cookie保存客戶(hù)端瀏覽器請(qǐng)求服務(wù)器頁(yè)面的請(qǐng)求信息時(shí),保存時(shí)間的長(zhǎng)短取決于Cookie對(duì)象的Expires屬性,可以根據(jù)需要來(lái)設(shè)置。若未設(shè)置Cookie的失效日期,則它們僅保存到關(guān)閉瀏覽器為止。若將Cookie對(duì)象的Expires屬性設(shè)置為DateTime.MaxValue,則表示Cookie永遠(yuǎn)不會(huì)過(guò)期。
[2].Cookie存儲(chǔ)的數(shù)據(jù)量有所限制,大多數(shù)瀏覽器支持的最大容量為4096字節(jié),因此不要用Cookie來(lái)保存大量數(shù)據(jù)。
[3]. 并非所有瀏覽器都支持Cookie,并且數(shù)據(jù)是以明文形式保存在客戶(hù)端計(jì)算機(jī)中,因此最好不要用Cookie來(lái)保存敏感的未加密數(shù)據(jù)。
[4].在ASP.NET中有兩個(gè)Cookies集合,即:Response對(duì)象的Cookies集合和Request對(duì)象的Cookies集合,但兩者的作用有所不同,通過(guò)前者可以將Cookie寫(xiě)入客戶(hù)端,通過(guò)后者可以讀取存儲(chǔ)在客戶(hù)端的Cookie。
接下來(lái)講到Cookie的實(shí)際應(yīng)用。
首先建立如圖所示的界面,通過(guò)該界面可登錄到某個(gè)網(wǎng)站,具體要求如下:
- 在首次登錄后,將登錄信息寫(xiě)入到用戶(hù)計(jì)算機(jī)的Cookie中;
- 當(dāng)再次登錄時(shí),將用戶(hù)計(jì)算機(jī)中的Cookie信息讀出并顯示,以備用戶(hù)選擇使用;
- 可以利用讀出Cookie中的信息來(lái)直接登錄網(wǎng)站。

操作步驟
1、在VS新建一個(gè)的空白的asp.net應(yīng)用程序,在項(xiàng)目管理器中,添加一個(gè)Web窗體;使用一個(gè)2行3列的表格進(jìn)行布局;布局結(jié)束后,將2個(gè)Label控件分別置于布局表格的左側(cè),分別將其Text屬性設(shè)置為用戶(hù)名和密碼,在布局表格中添加兩個(gè)TextBox控件、一個(gè)Button控件和一個(gè)CheckBox控件,將Button控件的Text屬性設(shè)置為“登錄”,將CheckBox控件的Text屬性設(shè)置為“記住用戶(hù)名和密碼”。
2、添加一個(gè)HTML頁(yè)面
將默認(rèn)將名稱(chēng)改為login.html
3、編寫(xiě)事件處理代碼
<span style="font-family:KaiTi_GB2312;font-size:18px;">protected void Button1_Click(object sender, EventArgs e)
{
if (CheckBox1.Checked)
{
Response.Cookies["ID"].Expires = new DateTime(2016, 2, 24); //用鍵名為ID的Cookie設(shè)置生存時(shí)間
Response.Cookies["PW"].Expires = new DateTime(2016, 2, 24);
Response.Cookies["ID"].Value = TextBox1.Text; //將鍵名為ID的Cookie的值設(shè)置為文本框內(nèi)容
Response.Cookies["PW"].Value = TextBox2.Text;
}
Response.Redirect("Login.html");
}</span>
首先判斷該頁(yè)面定義的Cookie是否為空,若不為空則將Cookie中的內(nèi)容讀出并置于TextBox1和TextBox2兩個(gè)文本框中,這樣用戶(hù)在自己機(jī)器上第二次登錄同一個(gè)頁(yè)面時(shí),直接單擊【登錄】按鈕即可,省掉了再次輸入用戶(hù)ID和密碼的過(guò)程
<span style="font-family:KaiTi_GB2312;font-size:18px;"> protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["ID"] != null && Request.Cookies["PW"] != null)
{
TextBox1.Text = Request.Cookies["ID"].Value.ToString();
TextBox2.Text = Request.Cookies["PW"].Value.ToString();//將鍵名為ID的Cookie的值讀出,并在文本框TextBox2中顯示出來(lái)
}
}</span>
當(dāng)再次加載頁(yè)面的時(shí)候就會(huì)出現(xiàn)如下圖所示。

上面只是簡(jiǎn)單的展示了幾個(gè)比較常見(jiàn)的功能(保留用戶(hù)個(gè)人信息,如姓名、密碼等,幫助用戶(hù)快速登錄網(wǎng)頁(yè)),還有很多未知的功能讓我們?nèi)ヌ剿?br />
例如:
- 保存用戶(hù)的個(gè)人愛(ài)好,設(shè)計(jì)者可根據(jù)Cookie中記錄的用戶(hù)愛(ài)好來(lái)設(shè)置網(wǎng)站的風(fēng)格;
- 進(jìn)行在線(xiàn)購(gòu)物時(shí),記錄用戶(hù)購(gòu)買(mǎi)的商品信息;
- 記錄彈出窗口被彈出的狀況,一些頁(yè)面被打開(kāi)時(shí)會(huì)彈出通知或廣告窗口,可以使用Cookie記錄窗口被彈出的情況,了解彈出窗口是否被彈出過(guò),若被彈出過(guò),再次打開(kāi)頁(yè)面時(shí)就不再?gòu)棾鲈搹棾龃翱凇?/strong>
通過(guò)敲這個(gè)例子讓我更加深入的了解了Cookie是如何用的,以前看到這這種類(lèi)似的文章都躲著不看,感覺(jué)肯定難得不行,但是自己嘗試后才知道,其實(shí)一點(diǎn)都不難,所以學(xué)習(xí)一定不要怕困難。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,大家共同進(jìn)步!
相關(guān)文章
用存儲(chǔ)過(guò)程向數(shù)據(jù)庫(kù)存值的具體實(shí)現(xiàn)
本文為大家介紹下使用存儲(chǔ)過(guò)程向數(shù)據(jù)庫(kù)存值的具體實(shí)現(xiàn)過(guò)程,感興趣的朋友不要錯(cuò)過(guò)2014-01-01
.NET Core 2.0如何生成圖片驗(yàn)證碼完整實(shí)例
這篇文章主要給大家介紹了關(guān)于.NET Core 2.0如何生成圖片驗(yàn)證碼的相關(guān)資料,該功能主要是利用ZKWeb.System.Drawing來(lái)實(shí)現(xiàn),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
asp.net DataTable相關(guān)操作集錦(篩選,取前N條數(shù)據(jù),去重復(fù)行,獲取指定列數(shù)據(jù)等)
這篇文章主要介紹了asp.net DataTable相關(guān)操作,包括篩選,取前N條數(shù)據(jù),去重復(fù)行,獲取指定列數(shù)據(jù)等.基本涵蓋了DataTable的常見(jiàn)操作技巧,需要的朋友可以參考下2016-06-06
云服務(wù)器下搭建ASP.NET Core環(huán)境
本文給大家分享的是在云服務(wù)器上搭建ASP.NET Core環(huán)境以及成功運(yùn)行官網(wǎng)DEMO的教程,十分的細(xì)致全面,有需要的小伙伴可以參考下。2016-07-07
深入理解Asp.net中DataBinder.Eval的用法總結(jié)
本篇文章是對(duì)Asp.net中DataBinder.Eval的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

