程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET中利用cookies保持客戶端信息

ASP.NET中利用cookies保持客戶端信息

編輯:.NET實例教程

我當前所吃的東東都固定為食物,所以一點也不驚訝,這一周的主題為cookIEs。


CookIEs用於存儲特定用戶信息,它提供了Web程序中一種有用的方式。多年以來,JavaScript開發人員已經進行了有關cookIE的大量工作。同樣,ASP.Net通過System.Web空間名稱也提供了cookie的訪問。雖然你不應該使用cookIE來存儲一些敏感性的數據,但是,它們是處理鎖細數據的一個極好的選擇,比如顏色參數選擇或者最後一次訪問日期。

傳遞cookIEs
cookIE是存儲在客戶端計算機的一個小文件。如果你是一個Windows用戶,可以在用戶路徑中查看CookIEs路徑,即為Documents And Settings路徑。這一路徑包含這一文件名稱的文本文件:

username @ Web site domain that created the cookIE

(用戶名稱@建立cookIE的站點域名)

.Net System.Web空間名稱包含三個類,你可以使用它們來處理客戶端的CookIEs:

HttpCookie:提供一個建立和操作獨立HTTP cookIEs的安全類型的方式。

HttpResponse:Cookies屬性允許客戶端cookIEs被操作。

HttpRequest:Cookies屬性允許訪問客戶端操作的cookIEs。

HttpResponse和HttpRequest對象的Cookies屬性將返回一個HttpCookieCollection對象,它包含著,將單獨的cookies添加到集合(collection)中,以及從集合(collection)獲得一個單獨的cookIEs。

HttpCookIE類
HttpCookIE類針對於客戶存儲之用而建立的單獨cookies。一旦HttpCookie對象被建立,你可以將其添加到HttpResponse對象的Cookies屬性中。同樣的,你可以通過HttpRequest對象訪問現有的cookies。HttpCookIE類包含以下的公有屬性:

Domain(域名):獲得或設置與cookie有關的域名,可用於限制特定區域的cookIE訪問。

Expires(期限):獲得或設置cookie的終止日期和時間,你可以將其設置為一個過去的日期以自動終止或者刪除cookIE。

Names(名稱):獲得或設置cookIE名稱。

Path(路徑):獲得或設置cookie的虛擬路徑。這一屬性允許你限制cookie范圍,也就是說,訪問cookIE只能限制於一個特定的文件夾或者路徑。設置這一屬性限制為只能訪問特定路徑和該路徑下的所有文件。

Secure(安全):發信號以表示是否使用Secure Sockets Layer (SSL)來發送cookIE值。

Value(值):獲得或設置一個單獨的cookIE值。

Values(信息):返回包含在cookIE中的key/value的一個集合。

雖然這些還不是一個最詳盡的列表,但它提供了處理cookIEs所需要的東西。對於這些屬性的使用,以下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)

這一代碼段建立了一個名為LastVisited的新的cookie,並賦予當前日期和時間的值。同樣的,cookie終止期限設置為一個星期,相關的范圍為populated。一旦建立對象,通過Response.Cookies對象的Add方法就可以將對象添加到客戶端的cookies集合。HttpCookIE構造函數中的方法有兩種:

HttpCookie objectName = New HttpCookie("cookIEName")

HttpCookie objectName = New HttpCookie("cookieName", "cookIEValue")

同樣,Response對象包含一個SetCookie方法,這一方法可以接受一個HttpCookIE對象。

我的cookIE在哪裡?
一旦cookies被保存在客戶端,有多種不同的方法以提供你訪問它們。如果你知道cookIE名稱,可以使用HttpResponse對象很容易地訪問它的值。以下VB.Net行顯示了與cookIE有關的值:


 

Response.Write(Request.Cookies("LastVisitIEd").Value)

 

除此之外,可以通過一個HttpCookieCollection對象訪問cookies的完整列表。這就使得cookIE列表可以用一個for循環來訪問。以下C#代碼說明了這樣的例子:

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中相應的代碼如下:

 

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

穩定也是一個觀點
cookie文件存放在客戶端機器,所以你的用戶可以任意刪除或更改。此外,用戶還可以使cookies無效化。基於此原因,請記住不要依賴cookIE數據。你應該將重要的信息保存在服務器──特別是一個數據庫中。

在一個cookIE中存儲關鍵信息被認為是一種低級的程序設計,因為這些信息很容易被洩露,原因是這些信息位於客戶機器的一個文件中。在這一點,一種方法就是使用SSL,這是一種可以避免敏感信息的更好方法。

 

我可以使用cookIEs嗎?
用戶可以在自己的浏覽器上無效化cookie支持。你可以在自己的代碼中訪問這些設置以決定是否支持cookIEs。Request對象滿足了這一想法,以下VB.Net代碼顯示了這一過程:

 

If Request.Browser.CookIEs = True Then

' 使用cookIEs

Else

'沒有cookIE支持

End If

 

可以聯合代碼來使用cookie值。以下C#代碼段對cookIE支持進行了測試,並相應地將結果顯示在一個文本框:

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頁中的Page_Load事件。

保存數據的另一方式
ASP.Net提供了保存特定用戶數據的多種方法。其中一個老方法就是cookies。對於敏感數據,雖然cookIEs不是最好的方法,但它是諸如顏色參數選擇、最後一次訪問日期等親和力選項(benign items)的最佳選擇。雖然這些敏感數據重要,但當用戶的計算機崩潰時數據丟失,這也不是世界的末日。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved