ASP.NET中利用cookies保持客户端信息
作者:未知?? 請(qǐng)作者速與本人聯(lián)系
我當(dāng)前所吃的東東都固定為食物,所以一點(diǎn)也不驚訝,這一周的主題為cookies。
Cookies用于存儲(chǔ)特定用戶信息,它提供了Web程序中一種有用的方式。多年以來(lái),JavaScript開(kāi)發(fā)人員已經(jīng)進(jìn)行了有關(guān)cookie的大量工作。同樣,ASP.NET通過(guò)System.Web空間名稱(chēng)也提供了cookie的訪問(wèn)。雖然你不應(yīng)該使用cookie來(lái)存儲(chǔ)一些敏感性的數(shù)據(jù),但是,它們是處理鎖細(xì)數(shù)據(jù)的一個(gè)極好的選擇,比如顏色參數(shù)選擇或者最后一次訪問(wèn)日期。
傳遞cookies
cookie是存儲(chǔ)在客戶端計(jì)算機(jī)的一個(gè)小文件。如果你是一個(gè)Windows用戶,可以在用戶路徑中查看Cookies路徑,即為Documents And Settings路徑。這一路徑包含這一文件名稱(chēng)的文本文件:
username @ Web site domain that created the cookie
(用戶名稱(chēng)@建立cookie的站點(diǎn)域名)
.NET System.Web空間名稱(chēng)包含三個(gè)類(lèi),你可以使用它們來(lái)處理客戶端的Cookies:
HttpCookie:提供一個(gè)建立和操作獨(dú)立HTTP cookies的安全類(lèi)型的方式。
HttpResponse:Cookies屬性允許客戶端cookies被操作。
HttpRequest:Cookies屬性允許訪問(wèn)客戶端操作的cookies。
HttpResponse和HttpRequest對(duì)象的Cookies屬性將返回一個(gè)HttpCookieCollection對(duì)象,它包含著,將單獨(dú)的cookies添加到集合(collection)中,以及從集合(collection)獲得一個(gè)單獨(dú)的cookies。
HttpCookie類(lèi)
HttpCookie類(lèi)針對(duì)于客戶存儲(chǔ)之用而建立的單獨(dú)cookies。一旦HttpCookie對(duì)象被建立,你可以將其添加到HttpResponse對(duì)象的Cookies屬性中。同樣的,你可以通過(guò)HttpRequest對(duì)象訪問(wèn)現(xiàn)有的cookies。HttpCookie類(lèi)包含以下的公有屬性:
Domain(域名):獲得或設(shè)置與cookie有關(guān)的域名,可用于限制特定區(qū)域的cookie訪問(wèn)。
Expires(期限):獲得或設(shè)置cookie的終止日期和時(shí)間,你可以將其設(shè)置為一個(gè)過(guò)去的日期以自動(dòng)終止或者刪除cookie。
Names(名稱(chēng)):獲得或設(shè)置cookie名稱(chēng)。
Path(路徑):獲得或設(shè)置cookie的虛擬路徑。這一屬性允許你限制cookie范圍,也就是說(shuō),訪問(wèn)cookie只能限制于一個(gè)特定的文件夾或者路徑。設(shè)置這一屬性限制為只能訪問(wèn)特定路徑和該路徑下的所有文件。
Secure(安全):發(fā)信號(hào)以表示是否使用Secure Sockets Layer (SSL)來(lái)發(fā)送cookie值。
Value(值):獲得或設(shè)置一個(gè)單獨(dú)的cookie值。
Values(信息):返回包含在cookie中的key/value的一個(gè)集合。
雖然這些還不是一個(gè)最詳盡的列表,但它提供了處理cookies所需要的東西。對(duì)于這些屬性的使用,以下VB.NET范例給予最好的理解:
Dim testCookie As New HttpCookie("LastVisited")
testCookie.Value = DateTime.Now.ToString
testCookie.Expires = DateTime.Now.AddDays(7)
testCookie.Domain = "builder.com"
Response.Cookies.Add(testCookie)
這一代碼段建立了一個(gè)名為L(zhǎng)astVisited的新的cookie,并賦予當(dāng)前日期和時(shí)間的值。同樣的,cookie終止期限設(shè)置為一個(gè)星期,相關(guān)的范圍為populated。一旦建立對(duì)象,通過(guò)Response.Cookies對(duì)象的Add方法就可以將對(duì)象添加到客戶端的cookies集合。HttpCookie構(gòu)造函數(shù)中的方法有兩種:
HttpCookie objectName = New HttpCookie("cookieName")
HttpCookie objectName = New HttpCookie("cookieName", "cookieValue")
同樣,Response對(duì)象包含一個(gè)SetCookie方法,這一方法可以接受一個(gè)HttpCookie對(duì)象。
我的cookie在哪里?
一旦cookies被保存在客戶端,有多種不同的方法以提供你訪問(wèn)它們。如果你知道cookie名稱(chēng),可以使用HttpResponse對(duì)象很容易地訪問(wèn)它的值。以下VB.NET行顯示了與cookie有關(guān)的值:
Response.Write(Request.Cookies("LastVisitied").Value)
除此之外,可以通過(guò)一個(gè)HttpCookieCollection對(duì)象訪問(wèn)cookies的完整列表。這就使得cookie列表可以用一個(gè)for循環(huán)來(lái)訪問(wèn)。以下C#代碼說(shuō)明了這樣的例子:
HttpCookieCollection cookies;
HttpCookie oneCookie;
cookies = Request.Cookies;
string[] cookieArray = cookies.AllKeys;
for (int i=0; I < cookieArray.Length; i++) {
oneCookie = cookies[cookieArray[i]];
Response.Write(oneCookie.Name + " - " + oneCookie.Value);
}
VB.NET中相應(yīng)的代碼如下:
Dim i As Integer
Dim oneCookie As HttpCookie
For i = 0 To Request.Cookies.Count - 1
oneCookie = Request.Cookies(i)
Response.Write(oneCookie.Name + " - " + oneCookie.Value)
Next I
穩(wěn)定也是一個(gè)觀點(diǎn)
cookie文件存放在客戶端機(jī)器,所以你的用戶可以任意刪除或更改。此外,用戶還可以使cookies無(wú)效化。基于此原因,請(qǐng)記住不要依賴(lài)cookie數(shù)據(jù)。你應(yīng)該將重要的信息保存在服務(wù)器──特別是一個(gè)數(shù)據(jù)庫(kù)中。
在一個(gè)cookie中存儲(chǔ)關(guān)鍵信息被認(rèn)為是一種低級(jí)的程序設(shè)計(jì),因?yàn)檫@些信息很容易被泄露,原因是這些信息位于客戶機(jī)器的一個(gè)文件中。在這一點(diǎn),一種方法就是使用SSL,這是一種可以避免敏感信息的更好方法。
我可以使用cookies嗎?
用戶可以在自己的瀏覽器上無(wú)效化cookie支持。你可以在自己的代碼中訪問(wèn)這些設(shè)置以決定是否支持cookies。Request對(duì)象滿足了這一想法,以下VB.NET代碼顯示了這一過(guò)程:
If Request.Browser.Cookies = True Then
'' 使用cookies
Else
''沒(méi)有cookie支持
End If
可以聯(lián)合代碼來(lái)使用cookie值。以下C#代碼段對(duì)cookie支持進(jìn)行了測(cè)試,并相應(yīng)地將結(jié)果顯示在一個(gè)文本框:
if (Request.Browser.Cookies == true)
{
if (Request.Cookies["LastVisited1"] == null)
{
HttpCookie newCookie = new HttpCookie("LastVisited1",DateTime.Now.ToString());
newCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(newCookie);
this.txtName.Text = "Is this your first time?";
} else {
this.txtName.Text = "We haven''t seen you since " +
Request.Cookies["LastVisited1"].Value;
} }
你可以將這一代碼段添加到ASP.NET頁(yè)中的Page_Load事件。
保存數(shù)據(jù)的另一方式
ASP.NET提供了保存特定用戶數(shù)據(jù)的多種方法。其中一個(gè)老方法就是cookies。對(duì)于敏感數(shù)據(jù),雖然cookies不是最好的方法,但它是諸如顏色參數(shù)選擇、最后一次訪問(wèn)日期等親和力選項(xiàng)(benign items)的最佳選擇。雖然這些敏感數(shù)據(jù)重要,但當(dāng)用戶的計(jì)算機(jī)崩潰時(shí)數(shù)據(jù)丟失,這也不是世界的末日。
總結(jié)
以上是生活随笔為你收集整理的ASP.NET中利用cookies保持客户端信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DataGrid在分页状态下删除纪录的问
- 下一篇: 文件上传的实现(C#)