六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET中Cookie編程的基礎知識(4)

[摘要]控制 Cookie 有效范圍  默認情況下,一個站點的全部 Cookie 都一起保存在客戶機上,而且所有這些 Cookie 都會隨著對該站點發送的請求一起發送到服務器,也就是說,站點的每個頁面都能得到該站點的所有 Cookie。但有時候,您可能希望 Cookie 更具有針對性,這時,您可以通過兩種...
控制 Cookie 有效范圍

  默認情況下,一個站點的全部 Cookie 都一起保存在客戶機上,而且所有這些 Cookie 都會隨著對該站點發送的請求一起發送到服務器,也就是說,站點的每個頁面都能得到該站點的所有 Cookie。但有時候,您可能希望 Cookie 更具有針對性,這時,您可以通過兩種方法設置 Cookie 的有效范圍:

  把 Cookie 的有效范圍限制在服務器上的一個文件夾中,實際上這樣就將 Cookie 限制到站點上的某個應用程序。

  把有效范圍設置為某個域,從而允許您指定域中的哪些子域可以訪問 Cookie。

  將 Cookie 限制到某個文件夾或應用程序

  要將 Cookie 限制到服務器上的某個文件夾,請按如下方法設置 Cookie 的 Path 屬性:

Dim appCookie As New HttpCookie("AppCookie")
appCookie.Value = "written " & Now.ToString
appCookie.Expires = Now.AddDays(1)
appCookie.Path = "/Application1"
Response.Cookies.Add(appCookie)

  當然,您也可以通過直接設置 Response.Cookies 來編寫 Cookie,如前文所述。

  路徑可以是站點根目錄下的物理路徑,也可以是虛擬根目錄。這樣一來,Cookie 就只能用于 Application1 文件夾或虛擬根目錄中的頁面。例如,如果您的站點名為 www.contoso.com,則前面示例中生成的 Cookie 就只能用于路徑為 http://www.contoso.com/Application1/ 的頁面以及該文件夾下的所有頁面,而不適用于其他應用程序中的頁面,如 http://www.contoso.com/Application2/http://www.contoso.com/ 下的頁面。

  提示:通過對 Internet Explorer 和 Mozilla 瀏覽器進行測試發現,此處使用的路徑是區分大小寫的。一般而言,Windows 服務器上的 URL 不區分大小寫,但這種情況例外。您無法控制用戶如何在瀏覽器中輸入 URL,但是,如果您的應用程序依賴于與特定路徑相關的 Cookie,則請確保您所創建的所有超鏈接中的 URL 與 Path 屬性值的大小寫相匹配。

  將 Cookie 的有效范圍限制到域

  默認情況下,Cookie 與特定的域相關聯。例如,如果您的站點是 www.contoso.com,那么當用戶向該站點請求頁面時,您編寫的 Cookie 就被發送到服務器。(有特定路徑值的 Cookie 除外,我在上一節剛剛解釋過。) 如果您的站點有子域(例如 contoso.com、sales.contoso.com 和 support.contoso.com),就可以把 Cookie 同特定的子域相關聯。為此,需要設置 Cookie 的 Domain 屬性,如下所示:

Response.Cookies("domain").Value = DateTime.Now.ToString
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "support.contoso.com"

  如果按照這種方式設置域,則 Cookie 只能用于指定子域中的頁面。

  您也可以利用 Domain 屬性來創建可在多個子域中共享的 Cookie。例如,對域進行如下設置:

Response.Cookies("domain").Value = DateTime.Now.ToString
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "contoso.com"

  這樣,該 Cookie 就可用于主域、sales.contoso.com 和 support.contoso.com。

  讀取 Cookie

  當瀏覽器向服務器發送請求時,該服務器的 Cookie 會與請求一起發送。在 ASP.NET 應用程序中,您可以使用 Request 對象來讀取 Cookie。Request 對象的結構與 Response 對象的結構基本相同,所以從 Request 對象中讀取 Cookie 的方法與向 Response 對象中寫入 Cookie 的方法非常類似。以下示例顯示了兩種方法,目的都是獲取名為“username”的 Cookie 的值并將值顯示在 Label 控件中:

If Not Request.Cookies("userName") Is Nothing Then
Label1.Text = Server.HtmlEncode(Request.Cookies("userName").Value)
End If

If Not Request.Cookies("userName") Is Nothing Then
Dim aCookie As HttpCookie = Request.Cookies("userName")
Label1.Text = Server.HtmlEncode(aCookie.Value)
End If 

  在獲取 Cookie 的值之前,應該確保該 Cookie 確實存在。否則,您將得到一個 System.NullReferenceException(英文)異常。還需要注意的是,在頁面中顯示 Cookie 的內容之前,我調用了 HttpServerUtility.HtmlEncode(英文)方法對 Cookie 的內容進行編碼。之所以這樣做,是因為我要顯示 Cookie 的內容(一般您不會這樣做)而且要確保沒有任何惡意用戶在 Cookie 中添加了可執行腳本。有關 Cookie 安全性的詳細信息,請參閱 Cookie 和安全性。

  注意:由于不同的瀏覽器保存 Cookie 的方式也不同,所以同一臺計算機上的不同瀏覽器不一定能夠相互讀取各自的 Cookie。例如,如果使用 Internet Explorer 測試一個頁面,然后再使用其他瀏覽器進行測試,那么后者就不會找到 Internet Explorer 保存的 Cookie。當然,大多數人一般都是使用同一種瀏覽器進行 Web 交互的,因此在大多數情況下不會出現問題。但有時還是會遇到問題,比如您要測試應用程序對瀏覽器的兼容性。

  讀取 Cookie 中子鍵值的方法與設置該值的方法類似。以下是獲取子鍵值的一種方法:

If Not Request.Cookies("userInfo") Is Nothing Then
Label1.Text = _
Server.HtmlEncode(Request.Cookies("userInfo")("userName"))
Label2.text = _
Server.HtmlEncode(Request.Cookies("userInfo")("lastVisit"))
End If

  在上面的示例中,我獲取的是子鍵“lastVist”的值,在此前的討論中我把該值設置為 DateTime 值的字符串表示形式。請記住,Cookie 是用字符串的形式保存值的,所以要將 lastVisit 值用作日期,就必須對其進行轉換:

Dim dt As DateTime
dt = CDate(Request.Cookies("userInfo")("lastVisit"))

  Cookie 中子鍵的類型是 NameValueCollection(英文)類型的集合。因此,另一種獲取單個子鍵的方法是先獲取子鍵集合,然后按名稱提取子鍵的值,如下所示:

If Not Request.Cookies("userInfo") Is Nothing Then
Dim UserInfoCookieCollection As _
System.Collections.Specialized.NameValueCollection
UserInfoCookieCollection = Request.Cookies("userInfo").Values
Label1.Text = Server.HtmlEncode(UserInfoCookieCollection("userName"))
Label2.Text = Server.HtmlEncode(UserInfoCookieCollection("lastVisit"))
End If

  就像設置 Cookie 一樣,使用哪種方法讀取 Cookie 也由您自己決定。

什么是有效期?

  您可以讀取 Cookie 的名稱和值,除此以外,需要了解的有關 Cookie 的信息并不是很多。雖然您可以獲取 Domain 和 Path 屬性,但是這些屬性的用途很有限。例如,您可以讀取 Domain 屬性,但如果您的頁面與 Cookie 不在相同的域,您根本就不會在頁面的位置接收到該 Cookie。

  您無法讀取的是 Cookie 的過期日期和時間。事實上,當瀏覽器向服務器發送 Cookie 信息時,瀏覽器并未將過期信息包括在內。您可以讀取 Expires 屬性,但總是返回為零的日期/時間值。

  在前面的編寫 Cookie 一節中,我已經講過,是瀏覽器負責管理 Cookie 的,Expires 屬性就很好地印證了這一點。Expires 屬性的主要作用是幫助瀏覽器執行有關 Cookie 保存的日常管理。從服務器的角度來看,Cookie 要么存在要么不存在,所以對服務器而言,有效期并不是有用的信息。所以,瀏覽器在發送 Cookie 時并不提供此信息。如果您需要 Cookie 的過期日期,就必須重新設置,關于這一點我將在修改和刪除 Cookie 中介紹。

  更確切地說,您可以在向瀏覽器發送 Cookie 之前讀取已在 Response 對象中設置的 Expires 屬性,但您無法從返回的 Request 對象中獲取有效期信息。





主站蜘蛛池模板: 色中色资源站 | 在线免费视频国产 | 日日噜噜噜夜夜爽爽狠狠视频 | 在线视频综合网 | 日韩不卡高清视频 | 亚洲最大看欧美片网站 | 日韩欧美亚洲乱码中文字幕 | 亚洲国产精久久久久久久 | 手机天堂网 | 亚洲免费黄色网址 | 日韩视频高清免费看 | 亚洲a视频在线 | 天天摸天天碰天天碰 | 四虎影院在线网址 | 色综合网站在线 | 囗交交性网免费 | 日本手机在线视频 | 最近韩国高清在线 | 色狠台湾色综合网站 | 小视频福利| 四虎精品影院在线观看视频 | 人人精品 | 四虎影库在线播放 | 天堂中文在线网 | 一级毛片免费的 | 亚洲精品免费在线视频 | 桃花岛高清在线观看 | 午夜激情福利网 | 五月婷婷激情综合 | 天天干天天操天天做 | 青青视频免费观看 | 色婷亚洲| 日韩一区二区三区免费视频 | 最新天堂网| 亚洲一区二区免费在线观看 | 亚洲天堂精品在线观看 | 日韩在线免费 | 手机看片福利盒子久久青 | 在线视频一二三区 | 午夜黄色毛片 | 日日拍拍 |