asp.net中Cookie的使用

來源:互聯網
上載者:User
文章目錄
  • 12.2.2  Cookie的使用
  • 12.2.3  Cookie總結

Cookie 為 Web 應用程式儲存使用者相關資訊提供了一種有用的方法。例如,當使用者訪問網站時,可以利用 Cookie 儲存使用者喜好設定或其他資訊,這樣,當使用者下次再訪問網站時,應用程式就可以檢索以前儲存的資訊。

從技術上講,Cookie是小段儲存在用戶端的資料(如果你安裝的是XP,可以看一下<安裝Windows的盤>:\Documents and Settings\<使用者名稱>\Cookies檔案夾)。使用者訪問網站的時候,網站會給使用者一個包含到期時間的Cookie,瀏覽器收到Cookie後就存放在用戶端的檔案夾下。以後使用者每次訪問網站頁面的時候,瀏覽器會根據網站的URL在本地Cookie檔案夾內尋找是否存在當前網站關聯的Cookie,如果有的話就連同頁面請求一起發送到伺服器。

關於Cookie的知識還需要瞭解以下幾點。

·      Cookie只是一段字串,並不能執行。

·      大多數瀏覽器規定Cookie大小不超過4K,每個網站能儲存的Cookie不超過20個,所有網站儲存的Cookie總和不超過300個。

·      除了Cookie外,幾乎沒有其他的方法在用戶端的機器上寫入資料(就連Cookie的寫入操作也是瀏覽器進行的)。當然,連Cookie都可以通過瀏覽器安全配置來禁止。如果你使用IE瀏覽器,可以看一下“工具”→“Internet”選項→“隱私”一頁。現在的大多數網站都利用Cookie來儲存一些資料(比如你的ID),以便你下一次訪問網站時能直接“繼續”以前的配置,所以我還是建議你不要輕易關閉Cookie。

在使用Cookie時,必須意識到其固有的安全弱點。Cookie畢竟是存放於用戶端的。因此,不要在Cookie中儲存保密資訊,如使用者名稱、密碼、信用卡號等。在Cookie中不要儲存不應該由使用者掌握的內容,也不要儲存可能被其他竊取Cookie的人控制的內容。

12.2.2  Cookie的使用

下面,我們就來討論如何儲存、讀取、刪除和修改Cookie。首先在頁面上添加4個按鈕用來完成這4個操作。

<asp:Button ID="btn_SaveCookie" runat="server" OnClick="btn_SaveCookie_Click"

Text="儲存Cookie" />

<asp:Button ID="btn_ReadCookie" runat="server" Text="讀取Cookie"

OnClick="btn_ReadCookie_Click" />

<asp:Button ID="btn_ModifyCookie" runat="server" OnClick="btn_ModifyCookie_Click"

Text="修改Cookie" />

<asp:Button ID="btn_DelCookie" runat="server" Text="刪除Cookie"

OnClick="btn_DelCookie_Click" />

儲存Cookie的方法如下。

protected void btn_SaveCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = new HttpCookie("test1", "單值Cookie");

    SingleValueCookie.Expires = DateTime.Now.AddDays(1);

    Response.Cookies.Add(SingleValueCookie);

    HttpCookie MultiValueCookie = new HttpCookie("test2");

    MultiValueCookie.Values.Add("key1", "value1");

    MultiValueCookie.Values.Add("key2", "value2");

    MultiValueCookie.Expires = DateTime.Now.AddDays(1);

    Response.Cookies.Add(MultiValueCookie);

}

我們可以看到,一個Cookie中允許儲存單個值也可以儲存多個值。HttpCookie類型表示一個Cookie,Expires屬性用於修改Cookie的到期時間。對於單值Cookie,既可以直接在構造方法中指定值也可以使用Value屬性指定值。對於多值Cookie,既可以使用Values屬性的Add方法添加子鍵和值,也可以直接使用Values屬性的索引設定子鍵和值。上面這段代碼等價於下面這段代碼。

protected void btn_SaveCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = new HttpCookie("test1");

    SingleValueCookie.Value = "單值Cookie";

    SingleValueCookie.Expires = DateTime.Now.AddDays(1);

    Response.Cookies.Add(SingleValueCookie);

    HttpCookie MultiValueCookie = new HttpCookie("test2");

    MultiValueCookie.Values["key1"] = "value1";

    MultiValueCookie.Values["key2"] = "value2";

    MultiValueCookie.Expires = DateTime.Now.AddDays(1);

    Response.Cookies.Add(MultiValueCookie);

}

在添加完值以後,務必記得使用Response對象把Cookie重新返回給瀏覽器。我們的伺服器不能直接在用戶端機器上寫Cookie,而是由瀏覽器完成這一工作,當然使用者也可以設定是否允許瀏覽器讀寫Cookie。

下面是讀取Cookie的操作。

protected void btn_ReadCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = Request.Cookies["test1"];

    if (SingleValueCookie != null)

    {

        Response.Write(string.Format("Key:{0} Value:{1} Expires:{2}<br/>", "test1",

        SingleValueCookie.Value, SingleValueCookie.Expires));

    }

    HttpCookie MultiValueCookie = Request.Cookies["test2"];

    if (MultiValueCookie!= null)

    {

        Response.Write(string.Format("Key:{0} Value:{1}<br/>", "test2", MultiValueCookie.

          Value));

        foreach (string subkey in MultiValueCookie.Values.AllKeys)

        {

            Response.Write(string.Format("SubKey:{0} Value:{1} Expires:{2}<br/>",

            subkey, MultiValueCookie.Values[subkey], MultiValueCookie.Expires));

        }

    }

}

對於多值Cookie,我們通過遍曆AllKeys屬性返回的字串數組擷取所有子鍵Key,從而獲得子鍵的值。要注意的是,在訪問Cookie以前,需要檢測一下Cookie是否存在。開啟頁面,先單擊“儲存Cookie”按鈕,然後單擊“讀取Cookie”按鈕,得到以下輸出:

Key:test1 Value:單值Cookie Expires:0001-1-1 0:00:00

Key:test2 Value:key1=value1&key2=value2

SubKey:key1 Value:value1 Expires:0001-1-1 0:00:00

SubKey:key2 Value:value2 Expires:0001-1-1 0:00:00

這裡要說明以下幾點。

·      我們發現,所有Cookie的到期時間都不能正常顯示。這是因為瀏覽器返回給伺服器的Cookie是不包含到期時間的,而伺服器返回給瀏覽器的Cookie是包含到期時間的。到期時間只對用戶端瀏覽器有意義,對伺服器來說沒有什麼意義。

·      直接讀取多值Cookie的Value,它會把所有子鍵和子索引值都使用key=value方法顯示,多個子鍵使用“&”串連(類似URL的方式)。

下面是刪除Cookie的操作。

protected void btn_DelCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = Request.Cookies["test1"];

    SingleValueCookie.Expires = DateTime.MinValue;

    Response.Cookies.Add(SingleValueCookie);

}

如果你想刪除所有Cookie,可以遍曆刪除。

protected void btn_DelCookie_Click(object sender, EventArgs e)

{

    foreach (string key in Request.Cookies.AllKeys)

    {

        HttpCookie cookie = Request.Cookies[key];

        cookie.Expires = DateTime.MinValue;

        Response.Cookies.Add(cookie);

    }

}

我們始終要記住,伺服器不能直接刪除Cookie,刪除Cookie的操作是瀏覽器進行的。說是刪除,其實是把它的到期時間設定為過去的時間,讓Cookie到期。因此,對於刪除操作來說有三個步驟。

n  1.從Request對象中擷取Cookie。

n  2.把Cookie的到期時間設定為過去的時間。

n  3.把Cookie重新寫回Response中。

4.修改Cookie的操作也非常簡單。

protected void btn_ModifyCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = Request.Cookies["test1"];

    SingleValueCookie.Value = "修改後的單值Cookie";

    Response.Cookies.Add(SingleValueCookie);

}

12.2.3  Cookie總結

Cookie雖然是一個簡單實用的對象,但是我們也要注意Cookie的工作原理、大小限制以及安全性等,大致可以歸納為以下幾點。

·      儲存的物理位置。用戶端的Cookies檔案夾內。

·      儲存的類型限制。字串。

·      狀態使用的範圍。當前請求內容相關的上下文都能訪問到Cookie,Cookie對每個使用者來說都是獨立的。

·      儲存的大小限制。每個Cookie不超過4K資料。每個網站不超過20個Cookie。所有網站的Cookie總和不超過300個。

·      生命週期。每個Cookie都有自己的到期時間,超過了到期時間後失效。

·      安全與效能。儲存在用戶端,安全性差。對于敏感資料建議加密後儲存。

·      優點缺點與注意事項。可以很方便地關連網站和使用者,長久儲存使用者佈建。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.