ASP.Net 的Cookie簡介及用法
Cookie(餅乾)是一個在網頁應用程式上拿來儲存瀏覽者資料的做法之一‧ 例如,當一個瀏覽者參觀您的網站時,您就可用Cookie把對方的一些資料儲存起來,並且下一次再使用‧ 另外,如果您有學習過ASP, PHP這類語言的話,相信Cookie對你絕對不陌生‧ 假設您是學習VB, C++的設計師的話,用Cookie就好比是寫資料到使用者的Registry裡一樣‧ 只是用Cookie比較簡單,而且對初學者而言,Cookie也比Registry還容易瞭解!
Cookie事實上是以純文字方式儲存在使用者電腦某資料夾裡面的,以Microsoft Windows NT (2000, XP)的使用者來說,每一個使用者都有一個自己個人的資料夾來放Cookie檔案,而這資料夾通常都會在『C:\Documents and Settings\使用者\Cookies\』這邊‧ 每一個Cookie都儲存著每一個不同網站所存的資料,而每一項所擁有的資料都會不同,這會看網站程式編寫者而定‧ 有時候Cookie會儲存您在某一網站的帳號或密碼、會員身份、登入/登出日期等等‧ 甚至Cookie也可以拿來做是防治瀏覽者重覆投票的防範方法之一!
在使用Cookie上,注意cookie使用也是有一些限制的! 例如一般瀏覽器至少都會支援4096 Bytes的Cookie,允許20個(各網站‧如果您嘗試使用超過更多的Cookie,那麼小心舊的Cookie就會莫名其妙消失!),也許看起來很少,不過基本上卻已經足夠儲存你純文字的資料了! 另外也有一些瀏覽器會有只允許儲存共300 Cookies的限制(所有網站的加起來)‧ 還有,每一個Cookie都會有它的存活時間! 基本上來說,Cookie除了靠網站程式結束外,如果您自己關閉了瀏覽器,那麼Cookie也會自動消失‧ 不過值得慶幸的是您可以自由的設定Cookie的過期時間,這我將會說明!
『筆記:剛才提到了Cookie是儲存在瀏覽者電腦裡面的,所以身為網頁程式編寫者的您,也必須留意到瀏覽者也是會隨意的刪除或想辦法亂修改的! 有時太過相信Cookie的資料內容的話,也可能會導致一些人為問題喔!』
用ASP.Net 寫入一個Cookie資料
假設您是純ASP (Active Server Pages)的學習者,也許在剛開始接觸ASP.Net時可能會有點不習慣! 以Cookie做例子,要閱讀或寫Cookie絕對不是像ASP這樣:
閱讀Cookie資料(ASP):
Dim mycookie : mycookie = Request.Cookies("eat_cookie")
寫入Cookie資料(ASP):
Response.Cookies("eat_cookie") = "C is a cookie!"
在ASP.Net,跟ASP一樣,要寫Cookie都會要使用Response property,要讀用Request‧ 就先講寫入Cookie吧! 如果您想要建立一個Cookie資料,您可以創造單一個Cookie,或在同一時間建多重也是可以(Sub Cookies)‧ 單一的話:
Response.Cookies("mycookie").Value = "C is a cookie!"
要建立一個Sub cookie的話:
Response.Cookies("mycookie")("flavor") = "Coffee"
剛才我有提到Cookie過期的話題,如果要另外加長的話,那麼(假設存活時間設一年):
Response.Cookies("mycookie").Value = "C is a cookie"
Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)
註:用Sub cookie也是用類似的方法來設定存活時間
假如我的網站有Sub domain的話,您也可以設定Domain property來分享Cookie:
(例如我的網站叫www.tekcyberspace.com,然後我有一個Sub domain叫forum.tekcyberspace.com)
Response.Cookies("mycookie").Value = "C is a cookie"
Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)
Response.Cookies("mycookie").Domain = "forum.tekcyberspace.com"
閱讀Cookie資料
讀Cookie就比較簡單了‧ 我就直接講吧! 假設要讀單一Cookie的話:
Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")
寫出一個Cookie資料:
Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")
If Not get_mycookie Is Nothing Then
Response.Write(get_mycookie.Value)
End If
注意如果沒有Cookie在的話,你接受到的會是 Nothing‧
讀取並寫出Sub cookie資料:
Dim get_mycookie As String = Request.Cookies("my_cookie")("flavor")
If not get_mycookie = "" Then
Response.Write(get_mycookie)
End If