什麼是Cookie
Cookie,有時也用其複數形式Cookies,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料。通常經過加密,所以查看瀏覽器儲存到本地的Cookie時,一般都是一個文字檔這些檔案通常是以user@domain格式命名的,user是你的本機使用者名,domain是所訪問的網站的網域名稱。
如查看Csdn部落格在我本地的cookie:
檔案:
內容:
由於cookie都是經過加密的,所以看到的都是密文,只有很少的內容能看懂。如裡面的blog.csdn.net,由此可以猜出此檔案內容肯定跟csdn個人部落格有關,但具體的內容由於是加密的所以這些東西是很難讀懂的,加密也保證了資訊泄露的安全性。
其實說白了,cookie就是訪問網站時,伺服器將訪問者的個人資訊以文字文件的形式儲存到使用者本機電腦上,以方便再次訪問時直接讀取。而實現的這一技術就叫cookie。一旦將
Cookie 儲存在電腦上,則只有建立該Cookie 的網站才能讀取它。
Cookie有什麼作用
Cookie 的用途之一是儲存使用者在特定網站上的密碼和ID。典型的應用是判定註冊使用者是否已經登入網站,使用者可能會得到提示,是否在下一次進入此網站時保留使用者資訊以便簡化登入手續,這些都是Cookies的功用。另一個重要應用場合是“購物車”之類處理。使用者可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些資訊都會寫入ookies,以便在最後付款時提取資訊。各家公司利用cookie
的一般用途包括:線上定貨系統、網站個人化和網站跟蹤
Cookie的生命週期
Cookie可以保持登入資訊到使用者下次與伺服器的會話,換句話說,下次訪問同一網站時,使用者會發現不必輸入使用者名稱和密碼就已經登入了(當然,不排除使用者手工刪除Cookie)。而還有一些Cookie在使用者退出會話的時候就被刪除了,這樣可以有效保護個人隱私。
Cookie在產生時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內Cookie有效,超出周期Cookie就會被清除。有些頁面將Cookie的生存周期設定為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄使用者資訊,更加安全。
在網站設計對cookie進行編程時,如果沒有設定Expire的值cookie的內容暫時儲存在記憶體中,關閉瀏覽器之後該資訊就會被刪除;設定Expire的值之後,cookie會以文本的形式儲存到本地上,每次開啟瀏覽器訪問該網站時用戶端都會向伺服器發送該cookie,直至設定的cookie有效期間逾期為止,瀏覽器會將該資訊清除。
cookie編程
建立cookie
方法1:
Response.Cookies["username"].value="mike";Response.Cookies["username"].Expires=DateTime.MaxValue;
方法2:
HttpCookie acookie = new HttpCookie("username");acookie.Value="mike";acookie.Expires=DateTime.MaxValue; Response.Cookies.Add(acookie);
建立多值cookie
方法1:
Response.Cookies["login"]["username"].value="mike";Response.Cookies["login"]["password"].value="123456";Response.Cookies["login"].Expires=DateTime.MaxValue; //有效時間設定為最長
方法2:
HttpCookie cookie = new HttpCookie("login");cookie.Values["username"]="mike";cookie.Values["password"]="123456";cookie.Expires= System.DateTime.Now.AddDays(1);//設定到期時間 1天Response.Cookies.Add(cookie);
Cookie讀取
stringstr = Request.Cookies("userName").Value; Cookie多值讀取if (Request.Cookies["login"]!=null ){string name=Request.Cookies["login"]["username"];string password =Request.Cookies["login"]["password"]; }
Cookie刪除
通過Expires設定到期時間即可,如
cookie.Expires=DateTime.Now.AddDays(-30);
cookie記錄使用者名稱和密碼的執行個體
.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="Testcookie.login" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"> <title></title> <style type="text/css"> .style1 { width: 192px; } .style3 { width: 164px; } .style4 { width: 275px; } </style></head><body> <form id="form1" runat="server" action="login.aspx"> <table style="width: 100%;"> <tr> <td class="style4"> </td> <td align="center" class="style4"> <asp:Label ID="lblusername" runat="server" Text="使用者名稱"></asp:Label> </td> <td align="center" class="style3"> <asp:TextBox ID="txtusername" runat="server" Width="143px"></asp:TextBox> </td> <td> </td> </tr> <tr> <td> </td> <td align="center" class="style4"> <asp:Label ID="lblpassword" runat="server" Text="密 碼" ></asp:Label> </td> <td align="center" class="style3"> <asp:TextBox ID="txtpassword" runat="server" TextMode="Password"></asp:TextBox> </td> <td> </td> </tr> <tr> <td colspan="4" align="center"> <asp:Button ID="btnlogin" runat="server" Text="登陸" OnClick="btnlogin_Click" Width="82px" /> </td> </tr> </table> </form></body></html>
.aspx.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Testcookie{ public partial class login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //初始載入頁面判斷是否有cookie存在,若存在則讀取cookie中的使用者名稱和密碼 if (Request.Cookies["login"] != null) { string username = Request.Cookies["login"]["username"]; string password = Request.Cookies["login"]["password"]; Response.Write(username); txtusername.Text = username; txtpassword.Text = password; } } protected void btnlogin_Click(object sender, EventArgs e) { //第一次登入時儲存使用者名稱和密碼 HttpCookie cookie = new HttpCookie("login");//建立cookie cookie.Values["username"] = txtusername.Text;//儲存使用者名稱 cookie.Values["password"] = txtpassword.Text;//儲存密碼 cookie.Expires = DateTime.Today.AddDays(1);//設定到期時間,此值如不設定,cookie有效時期為Session的有效時期即關閉瀏覽器cookie消失 Response.Cookies.Add(cookie); // Response.Write(cookie.Values["username"] + cookie.Values["password"]); //Response.Write(Request.Cookies["login"]["username"] + Request.Cookies["login"]["username"]); } }}
測試的時候分別用例IE、360、Google瀏覽器,但發現在IE中儲存使用者名稱和密碼後不能在其他瀏覽器中讀取,同樣其他瀏覽器也做不到。這是因為在一台電腦中安裝多個瀏覽器,每個瀏覽器都會在各自獨立的空間存放cookie。因為cookie中不但可以確認使用者,還能包含電腦和瀏覽器的資訊,所以一個使用者用不同的瀏覽器登入或者用不同的電腦登入,都會得到不同的cookie資訊,另一方面,對於在同一台電腦上使用同一瀏覽器的多使用者群,cookie不會區分他們的身份,除非他們使用不同的使用者名稱登入。所以用不同瀏覽器登陸同意網站會記錄不同的使用者資訊和訪問資訊。
總結
在B/S開發中Cookie是一個很常用並且很重要的知識,不僅要學會對cookie的讀與寫,還有對cookie的用途、生命週期有一個全面系統的理解,從而協助我們更好的利用和使用cookie進行編程設計。當然提到cookie,最重要的一個問題就是安全問題,儘管在cookie中已經對資料加密,經過加密處理後的資訊即使被網路上一些別有用心的人截獲,也看不懂,因為他看到的只是一些無意義的字母和數字。然而,現在遇到的問題是,截獲Cookie的人不需要知道這些字串的含義,他們只要把別人的Cookie向伺服器提交,並且能夠通過驗證,他們就可以冒充受害人的身份,登陸網站。這種方法叫做Cookie欺騙。所以對於Cookie知識還需深入瞭解和挖掘。