1. cookie檔案格式:
cookie檔案為作業系統cookies目錄下的一堆txt檔案。檔名格式為:
《使用者名稱》@《網域名稱》[數字].txt
即,同乙個域下可能有多個cookie檔案:
elf@sohu[1].txt
elf@sohu[2].txt
elf@sohu[3].txt
檔名中的數字含義不明。實際上,瀏覽網頁時,瀏覽器會根據cookies目錄下index.dat中的索引資訊去定位到某乙個檔案,然後查詢相應cookie字段值。
cookie檔案為unix格式,只有換行(0x0a)沒有回車(0x0d)。每個cookie檔案內,各欄位之間以*分隔,每個欄位均包含8行資訊:
_ntes_nnid // 欄位名
456f74e9863f8f4b1a1e37774b0c464d,0 // 字段值
163.com/ // 字段所屬域
3584 // 標誌位
3205176064 // 過期時間(低位)
37425091 // 過期時間(高位)
2444768976 // 建立時間(低位)
30082544 // 建立時間(高位)
其中,過期時間和建立時間為filetime,需要轉成16進製制然後拼起來看。標誌位標記了一些安全資訊,如是否是httponly(稍後詳述)的等等。
2. wininet api對cookie的讀寫
非瀏覽器客戶端想要讀寫cookie,有如下幾個函式可用:
internetgetcookie
internetsetcookie
internetgetcookieex
internetsetcookieex
具體引數含義可以參考msdn,有如下幾個地方需要注意的:
1) 上述4個函式的引數lpszcookiename(cookie欄位名)一般傳null,而不要按msdn裡說的那樣去傳乙個欄位名,否則可能失敗。get時,傳null,會拿到乙個類似「name1=value1; name2=value2; ...」這樣的字串,自己去解析一下就好了,但是像標誌位、過期時間等資訊就丟掉了。set時,傳null,其它資訊(如欄位名、值、過期時間)都在lpszcookiedata裡以固定格式寫好傳進去:
注:上面**中,時間的格式為"day-month-year hour:minute:second"。
2) 在get時,如果引數lpszurl為1級網域名稱,那麼會同時拿到該網域名稱下所有2級網域名稱及子目錄下的符合條件的cookie。如果引數lpszurl為2級網域名稱,會同時拿到所有子目錄下的符合條件的cookie。如http://sohu.com,會拿到http://bai.sohu.com下的cookie。
3) vista和win7,且ie7或ie8時,ie預設開啟保護模式,此時ie讀寫的cookie不是在cookies目錄下,而是cookies目錄的low目錄下。而客戶端是從哪個目錄下去讀取cookie,就取決於當前客戶端程序的許可權:普通許可權程序拿cookies目錄,受限(low)許可權拿low目錄。如果程序是以普通許可權啟動的,想拿low目錄下的cookie,就需要以低許可權啟動另外乙個程序,用子程序去拿:
4) 在ie7及以後,cookie引入了乙個屬性httponly,值為0x2000。該標誌是乙個安全性標誌,如果乙個cookie欄位具有該屬性(標誌位具有0x2000這一位),則網頁指令碼無法獲取該欄位,此字段只存在於http請求的header中。而對於客戶端,則有:
ie6或ie7環境下:客戶端無法通過internetgetcookie獲取此字段值,只能讀取cookie文字,然後手動解析(參考第一部分:cookie檔案格式)。
ie8環境下:客戶端可以通過internetgetcookieex,且引數dwflags包含0x2000,來獲取此字段值。
Java如何讀寫cookie
how to use cookie?welcome to read the following words.1.寫cookie到客戶端 cookie c1 new cookie username hzh response.addcookie c1 cookie c2 new cookie passw...
Cookie 讀,寫,刪除操作
cookie的幾種常見屬性 document.cookie key value expires 失效時間 path 路徑 domain 網域名稱 secure secure表安全級別 name cookie date 2018 04 12 寫入cookie setcookie name admin,...
js來讀寫cookie操作
因為之前公司的專案前後端是在一起的,因為要用vue來重構之前的專案。所以token簽名要作為乙個引數傳遞到後台。所以就遇到兩個問題,1 token的儲存和獲取的問題。2 token 判斷。判斷使用者是否用token值。首先先說一下 token的儲存和獲取問題。相信本地儲存的操作大家都會不在具體闡述,...