ASP.NET中Cookie編程的基礎(chǔ)知識(shí)(1)
發(fā)表時(shí)間:2024-02-08 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]簡(jiǎn)介 Cookie 為 Web 應(yīng)用程序保存用戶相關(guān)信息提供了一種有用的方法。例如,當(dāng)用戶訪問(wèn)您的站點(diǎn)時(shí),您可以利用 Cookie 保存用戶首選項(xiàng)或其他信息,這樣,當(dāng)用戶下次再訪問(wèn)您的站點(diǎn)時(shí),應(yīng)用程序就可以檢索以前保存的信息! ”疚母乓榻B Cookie 在 ASP.NET 應(yīng)用程序中的應(yīng)用...
簡(jiǎn)介
Cookie 為 Web 應(yīng)用程序保存用戶相關(guān)信息提供了一種有用的方法。例如,當(dāng)用戶訪問(wèn)您的站點(diǎn)時(shí),您可以利用 Cookie 保存用戶首選項(xiàng)或其他信息,這樣,當(dāng)用戶下次再訪問(wèn)您的站點(diǎn)時(shí),應(yīng)用程序就可以檢索以前保存的信息。
本文概要介紹 Cookie 在 ASP.NET 應(yīng)用程序中的應(yīng)用,為您展示在 ASP.NET 中應(yīng)用 Cookie 的技術(shù)細(xì)節(jié),例如編寫(xiě) Cookie、然后再讀取它們。同時(shí),還將為您介紹 Cookie 的各種特性和各種特殊情況,以及 ASP.NET 對(duì) Cookie 的支持。
什么是 Cookie?
Cookie 是一小段文本信息,伴隨著用戶請(qǐng)求和頁(yè)面在 Web 服務(wù)器和瀏覽器之間傳遞。用戶每次訪問(wèn)站點(diǎn)時(shí),Web 應(yīng)用程序都可以讀取 Cookie 包含的信息。
假設(shè)在用戶請(qǐng)求訪問(wèn)您的網(wǎng)站 www.contoso.com 上的某個(gè)頁(yè)面時(shí),您的應(yīng)用程序發(fā)送給該用戶的不僅僅是一個(gè)頁(yè)面,還有一個(gè)包含日期和時(shí)間的 Cookie。用戶的瀏覽器在獲得頁(yè)面的同時(shí)還得到了這個(gè) Cookie,并且將它保存在用戶硬盤(pán)上的某個(gè)文件夾中。
以后,如果該用戶再次訪問(wèn)您站點(diǎn)上的頁(yè)面,當(dāng)該用戶輸入 URL www.contoso.com 時(shí),瀏覽器就會(huì)在本地硬盤(pán)上查找與該 URL 相關(guān)聯(lián)的 Cookie。如果該 Cookie 存在,瀏覽器就將它與頁(yè)面請(qǐng)求一起發(fā)送到您的站點(diǎn),您的應(yīng)用程序就能確定該用戶上一次訪問(wèn)站點(diǎn)的日期和時(shí)間。您可以根據(jù)這些信息向用戶發(fā)送一條消息,也可以檢查過(guò)期時(shí)間或執(zhí)行其他有用的功能。
Cookie 是與 Web 站點(diǎn)而不是與具體頁(yè)面關(guān)聯(lián)的,所以無(wú)論用戶請(qǐng)求瀏覽站點(diǎn)中的哪個(gè)頁(yè)面,瀏覽器和服務(wù)器都將交換 www.contoso.com 的 Cookie 信息。用戶訪問(wèn)其他站點(diǎn)時(shí),每個(gè)站點(diǎn)都可能會(huì)向用戶瀏覽器發(fā)送一個(gè) Cookie,而瀏覽器會(huì)將所有這些 Cookie 分別保存。
以上就是 Cookie 的基本工作原理。那么,Cookie 有哪些用途呢?最根本的用途是 Cookie 能夠幫助 Web 站點(diǎn)保存有關(guān)訪問(wèn)者的信息。更概括地說(shuō),Cookie 是一種保持 Web 應(yīng)用程序連續(xù)性(即執(zhí)行“狀態(tài)管理”)的方法。瀏覽器和 Web 服務(wù)器除了在短暫的實(shí)際信息交換階段以外總是斷開(kāi)的,而用戶向 Web 服務(wù)器發(fā)送的每個(gè)請(qǐng)求都是單獨(dú)處理的,與其他所有請(qǐng)求無(wú)關(guān)。然而在大多數(shù)情況下,都有必要讓 Web 服務(wù)器在您請(qǐng)求某個(gè)頁(yè)面時(shí)對(duì)您進(jìn)行識(shí)別。例如,購(gòu)物站點(diǎn)上的 Web 服務(wù)器跟蹤每個(gè)購(gòu)物者,以便站點(diǎn)能夠管理購(gòu)物車(chē)和其他的用戶相關(guān)信息。因此 Cookie 的作用就類似于名片,它提供了相關(guān)的標(biāo)識(shí)信息,可以幫助應(yīng)用程序確定如何繼續(xù)執(zhí)行。
使用 Cookie 能夠達(dá)到多種目的,所有這些目的都是為了使 Web 站點(diǎn)記住您。例如,一個(gè)實(shí)施民意測(cè)驗(yàn)的站點(diǎn)可以簡(jiǎn)單地利用 Cookie 作為布爾值,表示您的瀏覽器是否已經(jīng)參與了投票,從而避免您重復(fù)投票; 而那些要求用戶登錄的站點(diǎn)則可以通過(guò) Cookie 來(lái)確定您是否已經(jīng)登錄過(guò),這樣您就不必每次都輸入憑據(jù)。
有關(guān) Cookie 的更多背景信息,建議您閱讀 Verizon Web 站點(diǎn)中的“How Internet Cookies Work”一文,地址為 http://www22.verizon.com/about/community/learningcenter/articles/displayarticle1/0,4065,1022z1,00.html(英文)。其作者詳細(xì)解釋了什么是 Cookie 以及 Cookie 是如何在瀏覽器和服務(wù)器之間交換信息的,他還全面總結(jié)了 Cookie 涉及的隱私問(wèn)題。
順便問(wèn)一下,您是否想知道它們?yōu)槭裁幢环Q作“Cookie”?Jargon File(又稱為“The New Hacker's Dictionary”)版本 4.3.3 對(duì)這一術(shù)語(yǔ)的詞源給出了準(zhǔn)確的定義和合理的解釋。您可以在 http://www.catb.org/~esr/jargon/jargon.html#cookie(英文)找到相關(guān)的條目。
在此后的內(nèi)容中,本文將假設(shè)您已經(jīng)知道什么是 Cookie,并且假設(shè)您已經(jīng)清楚為什么要在 ASP.NET 應(yīng)用程序中使用 Cookie。
Cookie 的限制
在開(kāi)始討論 Cookie 的技術(shù)細(xì)節(jié)之前,我想先介紹一下 Cookie 應(yīng)用的幾條限制。大多數(shù)瀏覽器支持最多可達(dá) 4096 字節(jié)的 Cookie,如果要將為數(shù)不多的幾個(gè)值保存到用戶計(jì)算機(jī)上,這一空間已經(jīng)足夠大,但您不能用一個(gè) Cookie 來(lái)保存數(shù)據(jù)集或其他大量數(shù)據(jù)。在實(shí)際應(yīng)用中,您可能并不希望在 Cookie 中保存大量的用戶信息,而只希望保存用戶編號(hào)或其他標(biāo)識(shí)符。之后,當(dāng)用戶再次訪問(wèn)您的站點(diǎn)時(shí),您就可以使用該用戶 ID 在數(shù)據(jù)庫(kù)中查找用戶的詳細(xì)信息。(有關(guān)保存用戶信息的說(shuō)明,請(qǐng)參閱 Cookie 和安全性。)
瀏覽器還限制了您的站點(diǎn)可以在用戶計(jì)算機(jī)上保存的 Cookie 數(shù)。大多數(shù)瀏覽器只允許每個(gè)站點(diǎn)保存 20 個(gè) Cookie。如果試圖保存更多的 Cookie,則最先保存的 Cookie 就會(huì)被刪除。還有些瀏覽器會(huì)對(duì)來(lái)自所有站點(diǎn)的 Cookie 總數(shù)作出限制,這個(gè)限制通常為 300 個(gè)。
您最可能遇到的 Cookie 限制是:用戶可以設(shè)置自己的瀏覽器,拒絕接受 Cookie。您很難解決這個(gè)問(wèn)題,除非完全不使用 Cookie 而是通過(guò)其他機(jī)制來(lái)保存用戶相關(guān)信息。保存用戶信息的一種常用方法是會(huì)話狀態(tài),但會(huì)話狀態(tài)又依賴于 Cookie。這一點(diǎn)在后面的 Cookie 和會(huì)話狀態(tài)中闡述。
注意:有關(guān)狀態(tài)管理和 Web 應(yīng)用程序中用于保存信息的選項(xiàng)的詳細(xì)信息,請(qǐng)參閱 Introduction to Web Forms State(英文)和 State Management Recommendations(英文)。
更一般的經(jīng)驗(yàn)很可能是,盡管 Cookie 在應(yīng)用程序中非常有用,應(yīng)用程序也不應(yīng)該依賴于能夠保存 Cookie。利用 Cookie 可以做到錦上添花,但不要利用它們來(lái)支持關(guān)鍵功能。如果您的應(yīng)用程序必須使用 Cookie,則您可以通過(guò)測(cè)試來(lái)確定瀏覽器是否接受 Cookie。我在本文后面的檢查瀏覽器是否接受 Cookie 一節(jié)中簡(jiǎn)單介紹了一種測(cè)試方法。