亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 19:10:56
字體:
來源:轉載
供稿:網友

     刪除 Cookie
  
    刪除 Cookie(即把該 Cookie 從用戶的硬盤上物理刪除)是修改 Cookie 的一種形式。由于 Cookie 位于用戶的計算機中,所以您無法直接將其刪除。但是,您可以讓瀏覽器為您刪除 Cookie。修改 Cookie 的方法前面已經介紹過(即用相同的名稱創建一個新的 Cookie),不同的是將其有效期設置為過去的某個日期。當瀏覽器檢查 Cookie 的有效期時,就會刪除這個已過期的 Cookie。
  
    所以,刪除 Cookie 的方法與創建該 Cookie 的方法是相同的,只不過要把其有效期設置為過去的某個日期。以下示例比刪除單個 Cookie 要稍微有趣一些,它使用的方法可以刪除當前域的所有 Cookie:
  
  Dim i As Integer
  Dim cookieName As String
  Dim limit As Integer = Request.Cookies.Count - 1
  For i = 0 To limit
  aCookie = Request.Cookies(i)
  aCookie.Expires = DateTime.Now.AddDays(-1)
  Response.Cookies.Add(aCookie)
  Next
  
    修改或刪除子鍵
  
    修改單個子鍵的方法與最初創建它的方法相同:
  
  Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
  Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)
  
    比較復雜的問題是如何刪除單個子鍵。您不能只是簡單地重新設置 Cookie 的過期日期,因為這樣只能刪除整個 Cookie 而不能刪除單個子鍵。實際的解決方案是對包含子鍵的 Cookie 的 Values 集合進行操作。首先,通過從 Request.Cookies 對象中獲取 Cookie 來重新創建 Cookie。然后,您就可以調用 Values 集合的 Remove 方法,將要刪除的子鍵名稱傳遞到 Remove 方法。接下來,您通??梢詫⑿薷暮蟮?Cookie 添加到 Response.Cookies 集合,以便將修改后的 Cookie 發送回瀏覽器。
  
    以下代碼顯示了如何刪除子鍵。在示例中,要刪除的子鍵的名稱在變量中指定。
  
  Dim subkeyName As String
  subkeyName = "userName"
  Dim aCookie As HttpCookie = Request.Cookies("userInfo")
  aCookie.Values.Remove(subkeyName)
  aCookie.Expires = DateTime.Now.AddDays(1)
  Response.Cookies.Add(aCookie)
  
    Cookie 與安全性
  
    在使用 Cookie 時,您必須意識到其固有的安全弱點。我所指的安全性并不是隱私問題,正如我在前面的什么是 Cookie?中所述,隱私在更大程度上是某些用戶面對的問題:這些用戶很關心 Cookie 中的信息是如何被使用的。而 Cookie 的安全性問題與從客戶機獲取數據的安全性問題類似。對于初學者,就應用程序而言,Cookie 是用戶輸入的另一種形式,因而很容易被他人非法獲取和利用。由于 Cookie 保存在用戶自己的計算機上,所以用戶至少可以看到您保存在 Cookie 中的信息。如果用戶愿意,還能在瀏覽器向您發送 Cookie 之前修改該 Cookie。
  
    所以,您千萬不要在 Cookie 中保存保密信息 - 用戶名、密碼、信用卡號等等。在 Cookie 中不要保存不應該由用戶掌握的內容,也不要保存可能被其他竊取 Cookie
的人控制的內容。
  
    同樣,要對從 Cookie 中得到的任何信息都持懷疑態度。不要認為得到的數據就是您當初設想的信息。處理 Cookie 值時采用的安全措施應該與處理 Web 頁面中用戶鍵入的數據時采用的安全措施相同。例如,在頁面中顯示值之前,我會對 Cookie 中的內容進行 HTML 編碼。這是一種標準的方法,可以在顯示之前凈化從用戶處得到的信息,
對 Cookie 的處理與此相同。
  
    另一個需要關心的問題是,Cookie 是以純文本的形式在瀏覽器和服務器之間傳送的,任何可以截取 Web 通信的人都可以讀取 Cookie。您可以對 Cookie 的屬性進行設置,使其只能在使用安全套接字層(SSL,又稱 https://)的連接上傳輸。SSL 并不能防止保存在用戶計算機上的 Cookie 被他人讀取或操作,但它能防止 Cookie 在傳輸途中被他人截取。本文不討論 SSL,但您必須清楚,您可以對 Cookie 進行傳輸保護。有關 SSL 的詳細信息,請參閱 Secure Sockets Layer: PRotect Your E-Commerce Web Site with SSL and Digital Certificates(英文)。
  
    面對這些安全問題,如何才能安全地使用 Cookie?您可以在 Cookie 中保存一些不重要的數據,如用戶首選項或其他對應用程序沒有重大影響的信息。如果確實需要把某些敏感信息(如用戶 ID)保存在 Cookie 中,就對這些信息進行加密。一種可行的方法是利用 asp.net Forms Authentication 實用程序創建一個身份驗證票據,作為 Cookie 保存。本文不討論有關加密的問題,但是,如果您需要在 Cookie 中保存敏感信


息,就應該試著采取措施來隱藏信息,防止被他人盜用。
  
    在 Mitigating Cross-site Scripting With HTTP-only Cookies(英文)一文中,您可以了解到更多有關 Cookie 及其安全弱點的信息。
  
    檢查瀏覽器是否接受 Cookie
  
    我在前面的 Cookie 的限制一節中曾經提到一個潛在問題,即用戶可以設置自己的瀏覽器拒絕接受 Cookie。如何才能知道您是否可以讀寫 Cookie?在不能寫入 Cookie 時不會出現任何錯誤(例如 Response.Cookies 不會拋出異常),因為服務器并不跟蹤呈現頁面后出現的情況。瀏覽器同樣不會向服務器發送任何有關其當前的 Cookie 設置的信息。(也許您需要了解,但 HttpBrowserCapabilities.Cookies
Property [英文] 屬性并不會告訴您 Cookie 是否被啟用,而只能告訴您當前的瀏覽器是否支持 Cookie。)
  
    一種確定瀏覽器是否接受 Cookie 的方法是先編寫一個 Cookie,然后再嘗試讀取這個 Cookie。如果不能讀取這個 Cookie,則可以認為該瀏覽器不接受 Cookie。
  
    我編寫了一個簡單的示例來說明如何測試 Cookie 是否被接受。該示例包含兩個頁面。在第一個頁面中,我編寫了一個 Cookie,然后把瀏覽器重新定向到第二個頁面。第二個頁面嘗試讀取這個 Cookie,轉而將瀏覽器重新定向到第一個頁面,并向 URL 添加一個帶有測試結果的查詢字符串變量。
  
    第一個頁面的代碼如下:
  Sub Page_Load()
  If Not Page.IsPostBack Then
  If Request.QueryString("AcceptsCookies") Is Nothing Then
  Response.Cookies("TestCookie").Value = "ok"
  Response.Cookies("TestCookie").Expires = _
  DateTime.Now.AddMinutes(1)
  Response.Redirect("TestForCookies.aspx?redirect=" & _
  Server.UrlEncode(Request.Url.ToString))
  Else
  labelAcceptsCookies.Text = "接受 Cookie = " & _
  Request.QueryString("AcceptsCookies")
  End If
  End If
  End Sub
  
    第一個頁面測試是否有回信,如果沒有,就搜索包含測試結果的查詢字符串變量 (AcceptsCookies)。如果沒有找到查詢字符串變量,則表示測試還沒有完成,代碼就寫出一個名為“TestCookie”的 Cookie。寫出 Cookie 之后,示例調用 Response.Redirect 來切換到測試頁面 (TestForCookies.aspx)。附加到測試頁面的 URL 的是名為 redirect 的查詢字符串變量,該變量中包含了當前頁面的 URL,這樣就能在執行測試后把重定向到該頁面。
  
    測試頁面可以完全由代碼組成,不需要包含控件。以下就是我使用的代碼:
  
  Sub Page_Load()
  Dim redirect As String = Request.QueryString("redirect")
  Dim acceptsCookies As String
  ' 是否接受 Cookie?
  If Request.Cookies("TestCookie") Is Nothing Then
  ' 沒有 Cookie,因此不需要接受
  acceptsCookies = 0
  Else
  acceptsCookies = 1
  ' 刪除測試 Cookie
  Response.Cookies("TestCookie").Expires = _
  DateTime.Now.AddDays(-1)
  End If
  Response.Redirect(redirect & "?AcceptsCookies=" & acceptsCookies, _
  True)
  End Sub
  
  
    讀取 redirect 查詢字符串變量后,代碼就嘗試讀取 Cookie。為了實現日常管理,如果該 Cookie 確實存在,就會被立即刪除。測試完成后,代碼從 redirect 查詢字符串變量傳遞的 URL 構造一個新的 URL。新的 URL 也包括一個包含測試結果的查詢字符串變量。最后一步是使用新的 URL 將瀏覽器重定向到原來的頁面。
  
    這個示例十分簡單,但說明了通過運行程序并查看結果來進行測試的基本原則。其中最需要改進的地方是要永久保存 Cookie 測試結果,這樣用戶就不必在每次瀏覽原始頁面時都重復進行測試。但是,實際上并不能做到這一點。Cookie 不會起作用,原因是顯而易見的。另一種可能是把測試結果保存在會話狀態中,但在默認情況下,會話狀態也依賴于 Cookie,而如果瀏覽器不接受 Cookie,會話狀態也不會起作用。解決后一個問題的辦法是采用無 Cookie 的會話狀態。下一節我將簡要介紹會話狀態如何與 Cookie 協作。
  
    Cookie 和會話狀態
  
    當用戶訪問您的站點時,服務器會為該用戶創建唯一的會話,會話將一直延續到用戶訪問結束。對于每個會話,ASP.NET 都維護一種基于服務器的結構(會話狀態),在該結構中應用程序可以保存用戶的相關信息。有關詳細信息,請參閱 session State(英文)。
  
    ASP.NET 需要能跟蹤每個用戶的會話 ID,這樣才能把用戶映射到服務器上的會話狀態信息。默認情況下,ASP.NET 使用一個非永久性的 Cookie 來保存會話狀態。如果您使用讀取 Cookie 一節的“讀取 Cookie 集合”中的示例,您可能就會在 Cookie 中發現一個會話狀態 Cookie。
  
    但是如果用戶禁用了瀏覽器的 Cookie,會話狀態就不能使用 Cookie 來保存會話ID,會話狀態也不會起作用。這就是為什么我在前面的檢查瀏覽器是否接受 Cookie 中說,無法在 Cookie 測試完畢后把測試結果實際保存在會話狀態中,因為沒有 Cookie 就沒有會話狀態。
  
    ASP.NET 提供了一種解決方案,即利用無 Cookie 的會話。您可以配置自己的應用程序,不在 Cookie 中保存會話 ID,而是在站點頁面的 URL 中保存。會話 ID 保存在 URL 中,也就是 ASP.NET 將 ID 保存在瀏覽器中,從而能夠在用戶請求其他頁面時取回 ID。


  
    無 Cookie 會話可以避免瀏覽器拒絕 Cookie 的問題,使您能夠使用會話狀態。如果您的應用程序依賴于會話狀態,您可能就需要對其進行配置,使它能使用無 Cookie 會話。但是,在某些情況下,如果用戶與其他人共享 URL - 可能是用戶通過電子郵件將 URL 發送給同事,而該用戶的會話仍然處于激活狀態 - 那么最終這兩個用戶可能共享同一個會話,結果將難以預料。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看精品| 91麻豆国产精品| 日韩网站免费观看高清| 国产精品福利无圣光在线一区| 国内偷自视频区视频综合| 国产精品久久久久久久9999| 久久精品国产综合| 国产成人a亚洲精品| 日韩在线视频中文字幕| 日韩中文字幕在线播放| 亚洲精品久久久久久久久久久| 亚洲精品中文字幕av| 国产精品普通话| 欧美大尺度在线观看| 日韩在线观看精品| 亚洲天堂av图片| 欧美日韩一区二区在线| 精品国产欧美一区二区三区成人| 日韩福利在线播放| 国产精品日韩在线| 国产成人综合久久| 亚洲深夜福利网站| 日韩电影中文字幕av| 久久视频国产精品免费视频在线| 久久国产精品久久久久久久久久| 亚洲午夜未删减在线观看| 中文字幕亚洲一区二区三区五十路| 亚洲三级av在线| 亚洲免费视频一区二区| 91精品国产色综合久久不卡98口| 97视频在线观看免费| 秋霞成人午夜鲁丝一区二区三区| 日韩av不卡电影| 久久天天躁狠狠躁夜夜躁2014| 亚洲成人a级网| 91精品啪在线观看麻豆免费| 久久久久久久久久久亚洲| 日韩女优在线播放| 正在播放欧美一区| 欧美性精品220| 久久香蕉国产线看观看网| 成人自拍性视频| 欧美在线视频一二三| 久久久久国色av免费观看性色| 一区二区三区无码高清视频| 久久99视频免费| 国产日韩中文字幕在线| 国产日韩综合一区二区性色av| 亚洲欧洲黄色网| 日韩av一区二区在线| 久久综合久久八八| 国内精品视频在线| 亚洲欧洲在线看| 亚洲美女精品成人在线视频| 国产精品影院在线观看| 精品动漫一区二区| 久久精品男人天堂| 一二美女精品欧洲| 国内偷自视频区视频综合| 亚洲欧洲美洲在线综合| 欧美中文字幕在线观看| 78m国产成人精品视频| 久久精品国产一区二区三区| 欧美亚洲国产精品| 97精品国产97久久久久久免费| 久久精品视频一| 国产成人在线亚洲欧美| 亚洲国产精品久久| 日本韩国欧美精品大片卡二| 中文字幕av日韩| 2021国产精品视频| 亚洲一区二区三区在线免费观看| 最好看的2019年中文视频| 欧美国产高跟鞋裸体秀xxxhd| 久久五月情影视| 久久中文字幕在线视频| 欧美激情精品久久久久久变态| 成人网欧美在线视频| 51午夜精品视频| 国产成+人+综合+亚洲欧美丁香花| 欧美国产极速在线| 欧美中文字幕在线播放| 91最新在线免费观看| 欧美成人免费观看| 亚洲免费小视频| 久热99视频在线观看| 日本免费一区二区三区视频观看| 日韩激情第一页| 欧美精品18videos性欧美| 97国产成人精品视频| 正在播放国产一区| 精品国产乱码久久久久久婷婷| 国产精品日韩专区| 国产精品美女视频网站| 91国产一区在线| 欧美精品激情在线| 欧美一级片免费在线| 一区二区欧美日韩视频| 日韩中文第一页| 国外成人在线播放| 成人精品一区二区三区电影黑人| 91免费国产网站| 日本成人精品在线| 久久精品视频亚洲| 免费97视频在线精品国自产拍| 亚洲乱码av中文一区二区| 伊人激情综合网| 在线视频一区二区| 精品久久久一区| 日韩国产在线播放| 日韩在线欧美在线国产在线| 国产精品美女主播在线观看纯欲| 欧美成人一区二区三区电影| 欧美另类xxx| 国产精品永久在线| 成人午夜黄色影院| 最近2019免费中文字幕视频三| 亚洲第一页中文字幕| 粗暴蹂躏中文一区二区三区| 欧美大片免费看| 国产精品444| 国产日本欧美一区二区三区在线| 欧美黄色三级网站| 岛国av一区二区在线在线观看| 成人xxxx视频| 亚洲欧洲中文天堂| 欧美国产日韩一区二区| 日韩最新在线视频| 日韩美女在线播放| 欧美日韩国产色视频| 欧美一区二区三区免费观看| 欧洲成人性视频| 日韩有码视频在线| 久久精品成人欧美大片| 亚洲区在线播放| 国产精品美腿一区在线看| 成人国产精品av| 久久久久久久久久久av| 国产视频久久久久久久| 欧美性猛交99久久久久99按摩| 久久久www成人免费精品张筱雨| 17婷婷久久www| 久久激情视频免费观看| 久久国产精品久久久| 欧美性xxxx极品hd满灌| 亚洲欧美另类国产| 国产成人高清激情视频在线观看| 亚洲另类图片色| 九九热这里只有精品免费看| 91a在线视频| 国产亚洲免费的视频看| 91精品国产色综合久久不卡98口| 日韩在线中文字幕| 欧美裸体xxxx| 国产成人综合一区二区三区| 97碰在线观看| 国产精品久久电影观看| 久久国产天堂福利天堂| 日韩在线观看免费av| 成人观看高清在线观看免费| 久久精品91久久久久久再现| 日韩美女毛茸茸| 国产日韩欧美自拍| 欧美性xxxxxxxxx|