學習web開發,使用Cookie是不可避免的,在這就淺 顯的總結一下,供新手參閱。個人感覺Cookie的使用和ASP.NET中的Session非常像,只不過Cookie是保存在客戶端,而 Session是在服務器端,兩者都以記錄信息為目的,作為訪問網站的憑據。本文僅僅是實踐操作,不涉及理論知識。
實際操作之前簡單的講一下Cookie吧!
Cookie其實就是一些保存在客戶端的小文件,為下次訪問網站時保存一些信息,比如:是否登錄。Cookie的最大優點就是使用簡單,傳遞、管理、維護 都由瀏覽器完成;缺點是不安全、大小有限制、受瀏覽器安全性設置限制。剛剛提到Cookie實際上是一些小文件,這些文件肯定是用來存儲信息的,那么這些 小文件在哪里呢?這要分情況而言,如果服務器建立的是非持久性Cookie,那么這些文件保存在瀏覽器的內存中,一旦完全關閉瀏覽器,Cookie便失效 了;如果服務器建立的是持久性Cookie,那么這些文件就被存放在:C:\你的用戶名\Default\AppData\Roaming \Microsoft\Windows\Cookies,直接把正確的路徑復制到資源管理器地址欄回車訪問即可,不要手動尋找,那樣是找不到的(即使顯示 了隱藏文件,也找不到Cookies文件夾),這些Cookie文件以文本文檔的形式存儲在這里,所以安全性就可想而知了。在程序中,如果我們設置Cookie的有效時間,則此Cookie就是持久性Cookie,如果不設置,默認的就是非持久性Cookie。
需要注意的是:當我們訪問一個頁面時,如果有對應的Cookie,瀏覽器會自動傳遞給服務器端,服務器端返回到客戶端的Cookie也由瀏覽器處理,完全不用我們操心;Cookie是可以覆蓋的,如果重復寫入同名的Cookie,那么將會覆蓋之前的Cookie。
以下的代碼展示了:“服務器端如何讀取客戶端的Cookie”、“服務器端向客戶端寫入非持久性Cookie”、“服務器端向客戶端寫入持久性Cookie”、“持久性Cookie和非持久性Cookie的區別”、“強制讓有效的持久化Cookie失效”。有了上邊的講解,再加上代碼中的詳細注釋,相信讀者一看就會。直接復制以下代碼到vs,可正常運行。
Web前台HTML代碼:
<body> <form id="frmUp" runat="server" method="post"> <div> 存入\讀取Cookies:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> <asp:Button ID="btnSaveTemp" runat="server" Text="寫入非持久化Cookies" onclick="btnSaveTemp_Click" /> <asp:Button ID="btnSaveKeep" runat="server" Text="寫入持久化Cookies" onclick="btnSaveKeep_Click" /> <asp:Button ID="btnChangeCookie" runat="server" Text="強制持久化Cookies過期" onclick="btnChangeCookie_Click" /> <asp:Button ID="btnRead" runat="server" Text="讀取" onclick="btnRead_Click" /> </div> </form> </body>
Web后台C#代碼:
//頁面加載處理 protected void Page_Load(object sender, EventArgs e) { //加載時判斷是否存在Cookies,存在則讀取 HttpCookie login = Request.Cookies["Login"]; //獲取客戶端返回的Cookies中名稱為Login的Cookie對象 if(login != null) { txtUserName.Text = login["userName"]; //讀取Login中屬性值 } else { txtUserName.Text = "Cookies無效"; } } //服務器端向客戶端寫入非持久化Cookie protected void btnSaveTemp_Click(object sender, EventArgs e) { HttpCookie tempCookie = new HttpCookie("Login"); //創建一個HttpCookie實例,Cookies名稱為Login,實例只是一個容器,真正使用的是Cookie名稱 tempCookie["userName"] = "www.kpdown.com"; //向Login中添加一個userName屬性,並賦值 Response.Cookies.Add(tempCookie); //把Cookies對象返回給客戶端 } //服務器端向客戶端寫入持久化Cookie protected void btnSaveKeep_Click(object sender, EventArgs e) { HttpCookie keepCookie = new HttpCookie("Login"); //創建一個HttpCookie實例,Cookies名稱為Login,實例只是一個容器,真正使用的是Cookie名稱 keepCookie["userName"] = "www.kpdown.com"; //向Login中添加一個userName屬性,並賦值 keepCookie.Expires = DateTime.Now.AddDays(2); //設定Cookies的有效期為兩天 Response.Cookies.Add(keepCookie); //把Cookies對象返回給客戶端 } //強制讓有效的持久化Cookie失效 protected void btnChangeCookie_Click(object sender, EventArgs e) { HttpCookie changeCookie = new HttpCookie("Login"); //使名稱為Login的Cookies失效,就把HttpCookie對象的Cookie名稱寫成Login,相當於用新Login覆蓋了舊的Login,Cookie可以覆蓋 changeCookie["userName"] = "www.kpdown.com"; //依然設置屬性值,無法讀取,證明Cookie已經失效 changeCookie.Expires = DateTime.Now.AddDays(-1); //設定Cookies的有效期為無效時間即可讓該Cookie失效 Response.Cookies.Add(changeCookie); } //服務器端讀取客戶端的Cookie protected void btnRead_Click(object sender, EventArgs e) { HttpCookie login = Request.Cookies["Login"]; //獲取客戶端返回的Cookies中名稱為Login的Cookie對象 if (login != null) { txtUserName.Text = login["userName"]; //讀取Login中屬性值 } else { txtUserName.Text = "Cookies無效"; } }