西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索
鐢熸椿鏈嶅姟
鏀粯瀹濋挶鍖�(Alipay)V10.2.53.7000 瀹夊崜鐗�鏀粯瀹濋挶鍖�(Alipay)V10.2.53.7000 瀹夊崜鐗�
鐧惧害鍦板浘瀵艰埅2022V15.12.10 瀹夊崜鎵嬫満鐗�鐧惧害鍦板浘瀵艰埅2022V15.12.10 瀹夊崜鎵嬫満鐗�
鎵嬫満娣樺疂瀹㈡埛绔痸10.8.40瀹樻柟鏈€鏂扮増鎵嬫満娣樺疂瀹㈡埛绔痸10.8.40瀹樻柟鏈€鏂扮増
鐣呴€旂綉鎵嬫満瀹㈡埛绔痸5.6.9 瀹樻柟鏈€鏂扮増鐣呴€旂綉鎵嬫満瀹㈡埛绔痸5.6.9 瀹樻柟鏈€鏂扮増
鍗冭亰鐭ヨ瘑鏈嶅姟appv4.5.1瀹樻柟鐗�鍗冭亰鐭ヨ瘑鏈嶅姟appv4.5.1瀹樻柟鐗�
褰遍煶鎾斁
p2psearcher瀹夊崜鐗�7.3  鎵嬫満鐗�p2psearcher瀹夊崜鐗�7.3 鎵嬫満鐗�
閰风嫍闊充箰2022瀹樻柟鐗圴11.0.8 瀹樻柟瀹夊崜鐗�閰风嫍闊充箰2022瀹樻柟鐗圴11.0.8 瀹樻柟瀹夊崜鐗�
鐖卞鑹烘墜鏈虹増v13.1.0鐖卞鑹烘墜鏈虹増v13.1.0
鐧惧害褰遍煶7.13.0 瀹樻柟鏈€鏂扮増鐧惧害褰遍煶7.13.0 瀹樻柟鏈€鏂扮増
褰遍煶鍏堥攱v6.9.0 瀹夊崜鎵嬫満鐗�褰遍煶鍏堥攱v6.9.0 瀹夊崜鎵嬫満鐗�
闃呰宸ュ叿
鑵捐鍔ㄦ极V9.11.5 瀹夊崜鐗�鑵捐鍔ㄦ极V9.11.5 瀹夊崜鐗�
涔︽棗灏忚鍏嶈垂鐗堟湰v11.5.5.153 瀹樻柟鏈€鏂扮増涔︽棗灏忚鍏嶈垂鐗堟湰v11.5.5.153 瀹樻柟鏈€鏂扮増
QQ闃呰鍣╝ppV7.7.1.910 瀹樻柟鏈€鏂扮増QQ闃呰鍣╝ppV7.7.1.910 瀹樻柟鏈€鏂扮増
鎳掍汉鐣呭惉鍚功appv7.1.5 瀹樻柟瀹夊崜鐗�鎳掍汉鐣呭惉鍚功appv7.1.5 瀹樻柟瀹夊崜鐗�
璧风偣璇讳功app鏂扮増鏈�20227.9.186 瀹夊崜鐗�璧风偣璇讳功app鏂扮増鏈�20227.9.186 瀹夊崜鐗�
閲戣瀺鐞嗚储
骞冲畨璇佸埜瀹塭鐞嗚储V9.1.0.1 瀹樻柟瀹夊崜鐗�骞冲畨璇佸埜瀹塭鐞嗚储V9.1.0.1 瀹樻柟瀹夊崜鐗�
娴烽€氳瘉鍒告墜鏈虹増(e娴烽€氳储)8.71 瀹樻柟瀹夊崜鐗�娴烽€氳瘉鍒告墜鏈虹増(e娴烽€氳储)8.71 瀹樻柟瀹夊崜鐗�
涓滄捣璇佸埜涓滄捣鐞嗚储4.0.5 瀹夊崜鐗�涓滄捣璇佸埜涓滄捣鐞嗚储4.0.5 瀹夊崜鐗�
涓摱璇佸埜绉诲姩鐞嗚储杞欢6.02.010 瀹樻柟瀹夊崜鐗�涓摱璇佸埜绉诲姩鐞嗚储杞欢6.02.010 瀹樻柟瀹夊崜鐗�
鍗庨緳璇佸埜灏忛噾鎵嬫満鐞嗚储杞欢3.2.4 瀹夊崜鐗�鍗庨緳璇佸埜灏忛噾鎵嬫満鐞嗚储杞欢3.2.4 瀹夊崜鐗�
鎵嬫満閾惰
绂忓缓鍐滄潙淇$敤绀炬墜鏈洪摱琛屽鎴风2.3.4 瀹夊崜鐗�绂忓缓鍐滄潙淇$敤绀炬墜鏈洪摱琛屽鎴风2.3.4 瀹夊崜鐗�
鏄撳埗浣滆棰戝壀杈慳pp4.1.16瀹夊崜鐗�鏄撳埗浣滆棰戝壀杈慳pp4.1.16瀹夊崜鐗�
鏀粯瀹濋挶鍖�(Alipay)V10.2.53.7000 瀹夊崜鐗�鏀粯瀹濋挶鍖�(Alipay)V10.2.53.7000 瀹夊崜鐗�
涓浗宸ュ晢閾惰鎵嬫満閾惰appV7.0.1.2.5 瀹夊崜鐗�涓浗宸ュ晢閾惰鎵嬫満閾惰appV7.0.1.2.5 瀹夊崜鐗�
涓浗閾惰鎵嬫満閾惰瀹㈡埛绔�7.2.5 瀹樻柟瀹夊崜鐗�涓浗閾惰鎵嬫満閾惰瀹㈡埛绔�7.2.5 瀹樻柟瀹夊崜鐗�
浼戦棽鐩婃櫤
鑵捐鐚庨奔杈句汉鎵嬫満鐗圴2.3.0.0 瀹樻柟瀹夊崜鐗�鑵捐鐚庨奔杈句汉鎵嬫満鐗圴2.3.0.0 瀹樻柟瀹夊崜鐗�
鍔茶垶鍥㈠畼鏂规鐗堟墜娓竩1.2.1瀹樻柟鐗�鍔茶垶鍥㈠畼鏂规鐗堟墜娓竩1.2.1瀹樻柟鐗�
楗ラタ椴ㄩ奔杩涘寲鏃犻檺閽荤煶鐗坴7.8.0.0瀹夊崜鐗�楗ラタ椴ㄩ奔杩涘寲鏃犻檺閽荤煶鐗坴7.8.0.0瀹夊崜鐗�
妞嶇墿澶ф垬鍍靛案鍏ㄦ槑鏄�1.0.91 瀹夊崜鐗�妞嶇墿澶ф垬鍍靛案鍏ㄦ槑鏄�1.0.91 瀹夊崜鐗�
鍔ㄤ綔灏勫嚮
鍦颁笅鍩庣獊鍑昏€卋t鐗�1.6.3 瀹樻柟鐗�鍦颁笅鍩庣獊鍑昏€卋t鐗�1.6.3 瀹樻柟鐗�
瑁呯敳鑱旂洘1.325.157 瀹夊崜鐗�瑁呯敳鑱旂洘1.325.157 瀹夊崜鐗�
鍦f枟澹槦鐭㈤泦缁搗4.2.1 瀹夊崜鐗�鍦f枟澹槦鐭㈤泦缁搗4.2.1 瀹夊崜鐗�
閬ぉ3D鎵嬫父1.0.9瀹夊崜鐗�閬ぉ3D鎵嬫父1.0.9瀹夊崜鐗�
濉旈槻娓告垙
瀹夊崜妞嶇墿澶ф垬鍍靛案2榛戞殫鏃朵唬淇敼鐗圴1.9.5 鏈€鏂扮増瀹夊崜妞嶇墿澶ф垬鍍靛案2榛戞殫鏃朵唬淇敼鐗圴1.9.5 鏈€鏂扮増
涔辨枟瑗挎父2v1.0.150瀹夊崜鐗�涔辨枟瑗挎父2v1.0.150瀹夊崜鐗�
淇濆崼钀濆崪3鏃犻檺閽荤煶鏈€鏂扮増v2.0.0.1 瀹夊崜鐗�淇濆崼钀濆崪3鏃犻檺閽荤煶鏈€鏂扮増v2.0.0.1 瀹夊崜鐗�
鍙h鑻遍泟鍗曟満鐗�1.2.0 瀹夊崜鐗�鍙h鑻遍泟鍗曟満鐗�1.2.0 瀹夊崜鐗�
灏忓皬鍐涘洟瀹夊崜鐗�2.7.4 鏃犻檺閲戝竵淇敼鐗�灏忓皬鍐涘洟瀹夊崜鐗�2.7.4 鏃犻檺閲戝竵淇敼鐗�
璧涜溅绔炴妧
鐧诲北璧涜溅2鎵嬫父1.47.1  瀹夊崜鐗�鐧诲北璧涜溅2鎵嬫父1.47.1 瀹夊崜鐗�
涓€璧锋潵椋炶溅瀹夊崜鐗坴2.9.14 鏈€鏂扮増涓€璧锋潵椋炶溅瀹夊崜鐗坴2.9.14 鏈€鏂扮増
璺戣窇鍗′竵杞︽墜鏈虹増瀹樻柟鏈€鏂扮増v1.16.2 瀹夊崜鐗�璺戣窇鍗′竵杞︽墜鏈虹増瀹樻柟鏈€鏂扮増v1.16.2 瀹夊崜鐗�
鐙傞噹椋欒溅8鏋侀€熷噷浜戜慨鏀圭増(鍏嶆暟鎹寘)v4.6.0j 閲戝竵鏃犻檺鐗�鐙傞噹椋欒溅8鏋侀€熷噷浜戜慨鏀圭増(鍏嶆暟鎹寘)v4.6.0j 閲戝竵鏃犻檺鐗�
鐧句箰鍗冪偖鎹曢奔2021鏈€鏂扮増5.78 瀹夊崜鐗�鐧句箰鍗冪偖鎹曢奔2021鏈€鏂扮増5.78 瀹夊崜鐗�
瑙掕壊鎵紨
姊﹀够鍓戣垶鑰呭彉鎬佺増1.0.1.2瀹夊崜鐗�姊﹀够鍓戣垶鑰呭彉鎬佺増1.0.1.2瀹夊崜鐗�
浠欏浼犺ro澶嶅叴瀹夊崜鐗�1.20.3鏈€鏂扮増浠欏浼犺ro澶嶅叴瀹夊崜鐗�1.20.3鏈€鏂扮増
姊﹀够璇涗粰鎵嬫父鐗�1.3.6 瀹樻柟瀹夊崜鐗�姊﹀够璇涗粰鎵嬫父鐗�1.3.6 瀹樻柟瀹夊崜鐗�
鐜嬭€呰崳鑰€V3.72.1.1 瀹夊崜鏈€鏂板畼鏂圭増鐜嬭€呰崳鑰€V3.72.1.1 瀹夊崜鏈€鏂板畼鏂圭増
璋佸灏忚溅寮烘墜鏈虹増v1.0.49 瀹夊崜鐗�璋佸灏忚溅寮烘墜鏈虹増v1.0.49 瀹夊崜鐗�
绯荤粺杞欢
mac纾佺洏鍒嗗尯宸ュ叿(Paragon Camptune X)V10.8.12瀹樻柟鏈€鏂扮増mac纾佺洏鍒嗗尯宸ュ叿(Paragon Camptune X)V10.8.12瀹樻柟鏈€鏂扮増
鑻规灉鎿嶄綔绯荤粺MACOSX 10.9.4 Mavericks瀹屽叏鍏嶈垂鐗�鑻规灉鎿嶄綔绯荤粺MACOSX 10.9.4 Mavericks瀹屽叏鍏嶈垂鐗�
Rar瑙e帇鍒╁櫒mac鐗坴1.4 瀹樻柟鍏嶈垂鐗�Rar瑙e帇鍒╁櫒mac鐗坴1.4 瀹樻柟鍏嶈垂鐗�
Mac瀹夊崜妯℃嫙鍣�(ARC Welder)v1.0 瀹樻柟鏈€鏂扮増Mac瀹夊崜妯℃嫙鍣�(ARC Welder)v1.0 瀹樻柟鏈€鏂扮増
Charles for MacV3.9.3瀹樻柟鐗�Charles for MacV3.9.3瀹樻柟鐗�
缃戠粶宸ュ叿
鎼滅嫍娴忚鍣╩ac鐗坴5.2 瀹樻柟姝e紡鐗�鎼滅嫍娴忚鍣╩ac鐗坴5.2 瀹樻柟姝e紡鐗�
閿愭嵎瀹㈡埛绔痬ac鐗圴1.33瀹樻柟鏈€鏂扮増閿愭嵎瀹㈡埛绔痬ac鐗圴1.33瀹樻柟鏈€鏂扮増
蹇墮mac鐗坴1.3.2 瀹樻柟姝e紡鐗�蹇墮mac鐗坴1.3.2 瀹樻柟姝e紡鐗�
鏋佺偣浜旂瑪Mac鐗�7.13姝e紡鐗�鏋佺偣浜旂瑪Mac鐗�7.13姝e紡鐗�
濯掍綋宸ュ叿
Apple Logic Pro xV10.3.2Apple Logic Pro xV10.3.2
Adobe Premiere Pro CC 2017 mac鐗坴11.0.0 涓枃鐗�Adobe Premiere Pro CC 2017 mac鐗坴11.0.0 涓枃鐗�
鍗冨崈闈欏惉Mac鐗圴9.1.1 瀹樻柟鏈€鏂扮増鍗冨崈闈欏惉Mac鐗圴9.1.1 瀹樻柟鏈€鏂扮増
Mac缃戠粶鐩存挱杞欢(MacTV)v0.121 瀹樻柟鏈€鏂扮増Mac缃戠粶鐩存挱杞欢(MacTV)v0.121 瀹樻柟鏈€鏂扮増
Adobe Fireworks CS6 Mac鐗圕S6瀹樻柟绠€浣撲腑鏂囩増Adobe Fireworks CS6 Mac鐗圕S6瀹樻柟绠€浣撲腑鏂囩増
鍥惧舰鍥惧儚
AutoCAD2015 mac涓枃鐗堟湰v1.0 瀹樻柟姝e紡鐗�AutoCAD2015 mac涓枃鐗堟湰v1.0 瀹樻柟姝e紡鐗�
Adobe Photoshop cs6 mac鐗坴13.0.3 瀹樻柟涓枃鐗�Adobe Photoshop cs6 mac鐗坴13.0.3 瀹樻柟涓枃鐗�
Mac鐭㈤噺缁樺浘杞欢(Sketch mac)v3.3.2 涓枃鐗�Mac鐭㈤噺缁樺浘杞欢(Sketch mac)v3.3.2 涓枃鐗�
Adobe After Effects cs6 mac鐗坴1.0涓枃鐗�Adobe After Effects cs6 mac鐗坴1.0涓枃鐗�
Adobe InDesign cs6 mac1.0 瀹樻柟涓枃鐗�Adobe InDesign cs6 mac1.0 瀹樻柟涓枃鐗�
搴旂敤杞欢
Mac鐗堝揩鎾�1.1.26 瀹樻柟姝e紡鐗圼dmg]Mac鐗堝揩鎾�1.1.26 瀹樻柟姝e紡鐗圼dmg]
Mac璇诲啓NTFS(Paragon NTFS for Mac)12.1.62 瀹樻柟姝e紡鐗�Mac璇诲啓NTFS(Paragon NTFS for Mac)12.1.62 瀹樻柟姝e紡鐗�
杩呴浄10 for macv3.4.1.4368 瀹樻柟鏈€鏂扮増杩呴浄10 for macv3.4.1.4368 瀹樻柟鏈€鏂扮増
Mac涓嬫渶寮哄ぇ鐨勭郴缁熸竻鐞嗗伐鍏�(CleanMyMac for mac)v3.1.1 姝e紡鐗�Mac涓嬫渶寮哄ぇ鐨勭郴缁熸竻鐞嗗伐鍏�(CleanMyMac for mac)v3.1.1 姝e紡鐗�
鑻规灉BootCamp5.1.5640 瀹樻柟鏈€鏂扮増鑻规灉BootCamp5.1.5640 瀹樻柟鏈€鏂扮増

首頁編程開發(fā)javascript|JQuery → Asp.Net、Javascript中的Cookies高級(jí)知識(shí)揭秘

Asp.Net、Javascript中的Cookies高級(jí)知識(shí)揭秘

前往專題相關(guān)文章發(fā)表評(píng)論 來源:本站整理時(shí)間:2011/1/12 9:50:34字體大小:A-A+

作者:佚名點(diǎn)擊:238次評(píng)論:1次標(biāo)簽: Cookies avascript

cookies清除V4.1.8.8 綠色漢化版
  • 類型:卸載刪除大�。�1.3M語言:中文 評(píng)分:8.3
  • 標(biāo)簽:
立即下載
 Cookies想必所有人都了解, 但是未必所有人都精通。本文講解了Cookies的各方面知識(shí), 并且提出來了最佳實(shí)踐。這是筆者在日常工作中的積累和沉淀。

一、基礎(chǔ)知識(shí)
1.什么是Cookies
Cookie 是一小段文本信息,伴隨著用戶請(qǐng)求和頁面在 Web 服務(wù)器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點(diǎn)時(shí) Web 應(yīng)用程序都可以讀取的信息。

例如,如果在用戶請(qǐng)求站點(diǎn)中的頁面時(shí)應(yīng)用程序發(fā)送給該用戶的不僅僅是一個(gè)頁面,還有一個(gè)包含日期和時(shí)間的 Cookie,用戶的瀏覽器在獲得頁面的同時(shí)還獲得了該 Cookie,并將它存儲(chǔ)在用戶硬盤上的某個(gè)文件夾中。

以后,如果該用戶再次請(qǐng)求您站點(diǎn)中的頁面,當(dāng)該用戶輸入 URL 時(shí),瀏覽器便會(huì)在本地硬盤上查找與該 URL 關(guān)聯(lián)的 Cookie。如果該 Cookie 存在,瀏覽器便將該 Cookie 與頁請(qǐng)求一起發(fā)送到您的站點(diǎn)。然后,應(yīng)用程序便可以確定該用戶上次訪問站點(diǎn)的日期和時(shí)間。您可以使用這些信息向用戶顯示一條消息,也可以檢查到期日期。

Cookie 與網(wǎng)站關(guān)聯(lián),而不是與特定的頁面關(guān)聯(lián)。因此,無論用戶請(qǐng)求站點(diǎn)中的哪一個(gè)頁面,瀏覽器和服務(wù)器都將交換 Cookie 信息。用戶訪問不同站點(diǎn)時(shí),各個(gè)站點(diǎn)都可能會(huì)向用戶的瀏覽器發(fā)送一個(gè) Cookie;瀏覽器會(huì)分別存儲(chǔ)所有 Cookie。

Cookie 幫助網(wǎng)站存儲(chǔ)有關(guān)訪問者的信息。一般來說,Cookie 是一種保持 Web 應(yīng)用程序連續(xù)性(即執(zhí)行狀態(tài)管理)的方法。除短暫的實(shí)際交換信息的時(shí)間外,瀏覽器和 Web 服務(wù)器間都是斷開連接的。對(duì)于用戶向 Web 服務(wù)器發(fā)出的每個(gè)請(qǐng)求,Web 服務(wù)器都會(huì)單獨(dú)處理。但是在很多情況下,Web 服務(wù)器在用戶請(qǐng)求頁時(shí)識(shí)別出用戶會(huì)十分有用。例如,購物站點(diǎn)上的 Web 服務(wù)器跟蹤每位購物者,這樣站點(diǎn)就可以管理購物車和其他的用戶特定信息。因此,Cookie 可以作為一種名片,提供相關(guān)的標(biāo)識(shí)信息幫助應(yīng)用程序確定如何繼續(xù)執(zhí)行。

使用 Cookie 能夠達(dá)到多種目的,所有這些目的都是為了幫助網(wǎng)站記住用戶。例如,一個(gè)實(shí)施民意測(cè)驗(yàn)的站點(diǎn)可以簡單地將 Cookie 作為一個(gè) Boolean 值,用它來指示用戶的瀏覽器是否已參與了投票,這樣用戶便無法進(jìn)行第二次投票。要求用戶登錄的站點(diǎn)則可以通過 Cookie 來記錄用戶已經(jīng)登錄,這樣用戶就不必每次都輸入憑據(jù)。

2.Cookies如何存儲(chǔ)
Cookies保存在用戶的本地機(jī)器上,不同的瀏覽器存儲(chǔ)在不同的文件夾中,并且按照域名分別保存。即網(wǎng)站之間的Cookies不會(huì)彼此覆蓋。

IE瀏覽器的用戶可以通過在本地的文檔中找到Cookies的txt文件, 不同操作系統(tǒng)的位置不同,windows server 2003/xp都保存在:

C:\Documents and Settings\Administrator\Cookies 文件夾下。

其中名稱txt按照域名保存,比如localhost域下的cookies為:

administrator@localhost[1].txt 或者 administrator@localhost[2].txt

其中后面的[1]和[2]是隨著每次保存交替變化的。

3.Cookies如何傳遞
Cookies的信息是在Web服務(wù)器和瀏覽器之間傳遞的。保存在Http請(qǐng)求中。

(1)請(qǐng)求頁面
在請(qǐng)求一個(gè)頁面的Http頭中,會(huì)將屬于此頁面的本地Cookies信息加在Http頭中,注意下面加粗的部分:

GET /Cookies/Test.aspx HTTP/1.1 Host: localhost:1335 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee
(2)頁面響應(yīng)
如果頁面要求寫入Cookies信息,則返回的Http如下,注意加粗的部分:

HTTP/1.x 200 OK Server: ASP.NET Development Server/9.0.0.0 Date: Thu, 06 Aug 2009 03:40:59 GMT X-AspNet-Version: 2.0.50727 Set-Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee; expires=Fri, 07-Aug-2009 03:40:59 GMT; path=/ Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 558 Connection: Close
4.Cookies如何查看
(1)查看Cookies的txt文件
IE用戶可以直接查看Cookies的txt文件。
比如:C:\Documents and Settings\Administrator\Cookies\administrator@localhost[1].txt



(2)使用插件
FF下使用Web Developer插件可以很方便的查看、刪除和修改Cookies:

插件截圖:



查看頁面Cookies:




二、Cookies高級(jí)知識(shí)
1.Cookie 的限制
大多數(shù)瀏覽器支持最大為 4096 字節(jié)的 Cookie。

瀏覽器還限制站點(diǎn)可以在用戶計(jì)算機(jī)上存儲(chǔ)的 Cookie 的數(shù)量。大多數(shù)瀏覽器只允許每個(gè)站點(diǎn)存儲(chǔ) 20 個(gè) Cookie;注意這里的20個(gè)是指主鍵值,也就是20條Cookies記錄,但是每個(gè)Cookies記錄還可以包含若干子鍵,下面會(huì)詳細(xì)解釋。如果試圖存儲(chǔ)更多 Cookie,則最舊的 Cookie 便會(huì)被丟棄。有些瀏覽器還會(huì)對(duì)它們將接受的來自所有站點(diǎn)的 Cookie 總數(shù)作出絕對(duì)限制,通常為 300 個(gè)。

2.Cookies的存儲(chǔ)格式
Cookies可以包含一個(gè)主鍵, 主鍵再包含子鍵。比如asp.net中獲取Cookies的格式是:

Request.Cookies[key][subkey].ToString();


其中的key就是主鍵,subkey就是主鍵關(guān)聯(lián)的子鍵。

(1)本地磁盤存儲(chǔ)格式:
My.Common.TestCookieInfo Pkid=999&TestValue=aaabbbcccdddeee localhost/ 1536 3059603968 30021392 2348960464 30021191 *
其中的Pkid=999&TestValue=aaabbbcccdddeee 是Cookies的值,由于使用了subkey=subvalue的格式, 所以此Cookies是包含子鍵的。

(2)Javascript中的Cookie格式
在Javascript中給的Cookie是一個(gè)字符串,通過document.cookies獲取。字符格式如下:

My.Common.SubKey=Pkid=999&TestValue=aaabbbcccdddeee; SingleKey=SingleKeyValue


上面的字符串包含了兩個(gè)Cookies,一個(gè)是不包含子鍵的SingleKey, 一個(gè)是包含pkid和TextValue兩個(gè)子鍵的My.Common.SubKey,兩個(gè)Cookie通過“;”分割。

(3)Asp.Net中的Cookies格式
和所有的服務(wù)器端語言一樣,Asp.Net中使用集合類保存Cookies集合:

public sealed class HttpCookieCollection : NameObjectCollectionBase {...}

通過HttpResquest和HttpResponse對(duì)象的Cookies屬性,可以獲取和寫入當(dāng)前頁面的Cookies。



3.Cookies的內(nèi)容編碼格式
Cookies的值中可以保存除了“;”以外的標(biāo)點(diǎn)符號(hào)。但是不能保存漢字。保存漢字會(huì)出現(xiàn)亂碼。

所以對(duì)于Cookies中的內(nèi)容要進(jìn)行統(tǒng)一的編碼和解碼。為了在瀏覽器端和服務(wù)器端都能夠進(jìn)行解碼和編碼, 所以要統(tǒng)一使用UTF編碼格式。

主要是因?yàn)閖avascript中只能使用UTF編碼格式。

4.Cookies的Path屬性
Cookies的Path屬性表示當(dāng)前的Cookies可以作用在網(wǎng)站的那個(gè)路徑下。

比如下面的兩個(gè)同名的Cookies:



允許存在兩個(gè)同名但是Path不同的Cookies。

無論是服務(wù)器端還是客戶端,在獲取時(shí)優(yōu)先獲取本頁路徑下面的Cookies。

也就是說如果在、/chapter10/路徑下面的頁面, 獲取testKey這個(gè)Cookies的值,則只能獲取到testValue222222這個(gè)值。



5.Cookies的過期時(shí)間
如果保存Cookies時(shí)未設(shè)置過期時(shí)間, 則Cookies的過期時(shí)間為“當(dāng)前瀏覽器進(jìn)程有效”,即和Session一樣關(guān)閉瀏覽器后則消失。在asp.net中還可以通過設(shè)置HttpCookie對(duì)象的過期時(shí)間為DateTime.MinValue來指定此Cookies為跟隨瀏覽器生效。(這句話來之不易啊,在腦袋等人的幫助下才查到的。)

如果設(shè)置了過期時(shí)間并且大于當(dāng)前時(shí)間,則會(huì)保存Cookies值。

如果設(shè)置了過期時(shí)間但是小于等于當(dāng)前時(shí)間,則清除Cookies值。


6.Cookies與Session
有時(shí)我們會(huì)忽略Cookies與Session的關(guān)系。但是兩者是密不可分的。

Session的唯一標(biāo)示:SessionID是通常保存在Cookies中的(也可以保存在URL中)。對(duì)于Asp.Net而言,SessionID保存在鍵值為“ASP.NET_SessionId”的Cookies中,如圖:



因?yàn)镃ookies的存儲(chǔ)數(shù)量是有限制的,所以我們的系統(tǒng)在保存Cookies的時(shí)候一定要注意防止沖掉這一個(gè)關(guān)鍵的Cookies。在下文介紹的最佳實(shí)踐-以強(qiáng)對(duì)象方式保存Cookies的代碼中特意對(duì)這個(gè)Cookies做了處理。

注意,在客戶端使用javascript腳本無法獲取“ASP.NET_SessionId”的Cookies, 因?yàn)榇薈ookies在服務(wù)器端設(shè)置了HttpOnly屬性為true。

ASP.Net中HttpCookie對(duì)象的HttpOnly 屬性 指定一個(gè)Cookie 是否可通過客戶端腳本訪問。不能通過客戶端腳本訪問為 true;否則為 false。默認(rèn)值為 false。此屬性并不能完全阻止客戶端在本地獲取cookies,但是可以增加通過腳本直接獲取的難度。

Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持 Cookie 屬性 HttpOnly。


7.Cookies加密
在設(shè)置Cookies的屬性時(shí),有一個(gè)選項(xiàng)Secure用來控制Cookie的加密特性。

如果通過 SSL 連接 (HTTPS) 傳輸 Cookie,則為 true;否則為 false。默認(rèn)為 false。

如果我們保存一個(gè)Cookies并設(shè)置加密,那么在非HTTPS的頁面中,無論是使用javascript還是服務(wù)器端都無法獲得此Cookies。但是在本地依然可以看到此Cookies的存在。


8.Cookies與Ajax
如果Ajax請(qǐng)求訪問一個(gè)服務(wù)器頁面,此服務(wù)器頁面是可以向用戶瀏覽器寫入Cookies和Session的。 

三、Cookies最佳實(shí)踐
在了解了Cookies的相關(guān)知識(shí)后,下面提出最佳的事件方法。其中包括客戶端和服務(wù)器端兩部分。

(1)Asp.Net 中保存Cookies
通常,我們使用Request和Response對(duì)象來直接操作Cookies:

寫入Cookies:

Response.Cookies["k1"].Value = "k1Value"; Response.Cookies["k2"]["k2-1"] = "k2-1Value"; Response.Cookies.Add(new HttpCookie("k3", "k3Value"));


讀取Cookies:

Request["k1"] ; Request.Cookies["k1"].Value ; Request.Cookies["k2"]["k2-1"]; Request.Cookies.Get(0).Value;


注意Request["k1"]這個(gè)大家熟悉的獲取get和post參數(shù)的方法,同時(shí)還能夠獲取Cookies的值!

另外上面語句中的有些是必須通過Value屬性訪問的,有些則不需要。

(2)以對(duì)象方式保存Cookies
下面提供一個(gè)可以以對(duì)象方式整體保存Cookies的工具類。并且只占用一條Cookies,所有的屬性都存在子鍵上。

源代碼:
/// <summary> /// Cookies基類。將需要保存Cookies的數(shù)據(jù)類此類派生,可以將強(qiáng)類型對(duì)象在Cookies中的保存和讀取。 /// </summary> /// <remarks> /// 2009.8.6 ziqiu.zhang created /// </remarks> /// <example> /// 假設(shè)MyCookiesInfo是從 從Cookies中獲取對(duì)象: /// <code> /// CookieInfo item = new CookieInfo(); //new以后已經(jīng)從Cookies中構(gòu)造了對(duì)象。 /// </code> /// 將對(duì)象保存在Cookies中: /// <code> /// CookieInfo item = new CookieInfo(); /// item.value = "test value"; /// item.SetCookies("1"); //Cookies有效期為1天 /// </code> /// </example> [System.Serializable] public class CookieInfo { #region ==================== Constructed Method ==================== /// <summary> /// 構(gòu)造函數(shù) /// </summary> public CookieInfo() { } #endregion #region ==================== Public Method ==================== /// <summary> /// 得到當(dāng)前Cookies的過期時(shí)間 /// </summary> /// <returns>過期時(shí)間</returns> public DateTime GetExpiresTime() { string cookieName = GetType().ToString(); if (HttpContext.Current.Request.Cookies[cookieName] != null) { return HttpContext.Current.Request.Cookies[cookieName].Expires; } return DateTime.MinValue; } /// <summary> /// 保存Cookies,過期時(shí)間為瀏覽器關(guān)閉則失效。 /// </summary> /// <param name="expiresTime">Cookies過期事件</param> /// <returns>是否保存成功</returns> public bool Save() { return this.Save(DateTime.MinValue); } /// <summary> /// 保存Cookies,需要指定過期時(shí)間。 /// </summary> /// <param name="expiresTime">Cookies過期事件</param> /// <returns>是否保存成功</returns> public bool Save(DateTime expiresTime) { string CookieName = GetType().ToString(); HttpCookie SessionCookie = null; //對(duì) SessionId 進(jìn)行備份. if (HttpContext.Current.Request.Cookies["ASP.NET_SessionId"] != null) { string SesssionId = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value.ToString(); SessionCookie = new HttpCookie("ASP.NET_SessionId"); SessionCookie.Value = SesssionId; } //設(shè)定cookie 過期時(shí)間. DateTime dtExpiry = expiresTime; HttpContext.Current.Response.Cookies[CookieName].Expires = dtExpiry; //設(shè)定cookie 域名. string domain = string.Empty; if (HttpContext.Current.Request.Params["HTTP_HOST"] != null) { //domain = "www.elong.com"; domain = HttpContext.Current.Request.Params["HTTP_HOST"].ToString(); } //如果是www.elong.com或多級(jí)域名,需要轉(zhuǎn)化為elong.com if (domain.IndexOf(".") > -1) { string[] temp = domain.Split('.'); if (temp.Length >= 3) { domain = temp[temp.Length - 2].Trim() + "." + temp[temp.Length - 1].Trim(); } HttpContext.Current.Response.Cookies[CookieName].Domain = domain; } //把類的屬性, 寫入Cookie. PropertyInfo[] Propertys = GetType().GetProperties(); foreach (PropertyInfo pi in Propertys) { object oj = pi.GetValue(this, null); Type type = pi.PropertyType; string valueStr = string.Empty; if (oj != null && oj.ToString() != string.Empty) { if (type == Type.GetType("System.DateTime")) { valueStr = ((DateTime)oj).ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); } else { valueStr = oj.ToString(); } HttpContext.Current.Response.Cookies[CookieName][pi.Name] = HttpUtility.UrlEncode(valueStr); } } //如果cookie總數(shù)超過20 個(gè), 重寫ASP.NET_SessionId, 以防Session 丟失. if (HttpContext.Current.Request.Cookies.Count > 20 && SessionCookie != null) { if (SessionCookie.Value != string.Empty) { HttpContext.Current.Response.Cookies.Remove("ASP.NET_SessionId"); HttpContext.Current.Response.Cookies.Add(SessionCookie); } } return true; } /// <summary> /// 找回Cookie值 /// </summary> public void Load() { string cookieValue = string.Empty; string CookieName = GetType().ToString(); //通過遍歷屬性, 從cookie 中找回值, 回寫到屬性. PropertyInfo[] Propertys = GetType().GetProperties(); foreach (PropertyInfo pi in Propertys) { try { cookieValue = HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName][pi.Name].ToString()); } catch { cookieValue = string.Empty; } if (pi.CanWrite && cookieValue != null && cookieValue != string.Empty) { try { object obb = cookieValue; Type type = pi.PropertyType; obb = Convert.ChangeType(obb, type); pi.SetValue(this, obb, null); } catch { } } } } #endregion }
使用
首先說明如何使用此類。

為想要保存在Cookies中的類建立模型,并且繼承自CookieInfo即可。比如下面建立了MyCookieInfo類,其中包含屬性pkid,TestValue和TestDateTime:

/// <summary> /// 保存Cookies的數(shù)據(jù)對(duì)象 /// </summary> [System.Serializable] public class MyCookieInfo : CookieInfo { private int m_Pkid = 0; public int Pkid { get { return m_Pkid ; } set { m_Pkid = value ; } } private string m_TestValue = ""; public string TestValue { get { return m_TestValue; } set { m_TestValue = value; } } private DateTime m_TestDateTime = DateTime.Now; public DateTime TestDateTime { get { return m_TestDateTime; } set { m_TestDateTime = value; } } }


接下來就可以使用對(duì)象的Save和Load方法保存和讀取Cookies:

保存
Save方法有兩個(gè)重載,不帶參數(shù)的Save方法表示Cookies的過期時(shí)間與瀏覽器相同,即瀏覽器關(guān)閉則Cookies消失。否則需要傳入Cookies過期時(shí)間。
MyCookieInfo testCookies = new MyCookieInfo(); testCookies.Pkid = 1; testCookies.TestValue = "中文測(cè)試"; testCookies.Save();
讀取

MyCookieInfo testCookies = new MyCookieInfo(); testCookies.Load(); this.lblMsg.Text = "Pkid:" + testCookies.Pkid.ToString(); this.lblMsg.Text += ",TestValue:" + testCookies.TestValue.ToString(); this.lblMsg.Text += ",TestDateTime:" + testCookies.TestDateTime.ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);
現(xiàn)在我們已經(jīng)可以將一個(gè)強(qiáng)類型的對(duì)象讀取和保存Cookies了。


(3)使用Javascript操作Cookies
在客戶端我們同樣需要操作Cookies。

下面是封裝了的專門用于操作Cookies的jQuery工具函數(shù)。如果還有人不知道jQuery是什么,請(qǐng)參考我的“從零開始學(xué)習(xí)jQuery”系列教程:

http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jQuery-Learn-1.html

當(dāng)然此工具函數(shù)稍加修改,就可以變成標(biāo)準(zhǔn)的Javascript函數(shù)。

下載地址:http://files.cnblogs.com/zhangziqiu/jquery.extend-lastest.js

工具函數(shù)說明:

方法簽名: jQuery.cookie(name, subName, value, options)

方法說明:讀取、寫入、刪除Cookies

方法參數(shù):