---
Introduction to Knockout.js and CRUD Operations in ASP.Net Web Forms Using Knockout.JS
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
Cookie怎麼寫就怎麼讀
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class B : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//產生一個Cookie
HttpCookie cookie = new HttpCookie("test");
//設定單值
cookie.Value = Server.UrlEncode("Hello!!世界");
//設定過期日
cookie.Expires = DateTime.Now.AddDays(2);
//寫到用戶端
Response.Cookies.Add(cookie);
}
}
//讀取cookie(以多值的方式)
protected void btn_test_Click(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies["test"];
foreach (string value in cookie.Values)
{
Response.Write("Null?"+(value==null)+"<br/>");/*順便測試看看是否為null還是空字串*/
Response.Write("空字串?"+(value=="")+"<br/>");
Response.Write("foreach迴圈中撈出Request.Cookies['test']所有的Value:" + Server.UrlDecode(value)+"<hr/>");
}
Response.Write("Null?"+(cookie["test"]==null)+"<br/>");
Response.Write("空字串?" + (cookie["test"]=="")+"<br/>");
Response.Write("cookie['test'](HttpCookie物件裡索引名為test的值):"+Server.UrlDecode(cookie["test"])+"<hr/>");
}
}