Cookie文件格式


原文參考:http://blog.csdn.net/lixianlin/article/details/2738229

1、Cookie文件的實質

  Cookie實際上是Web服務端與客戶端(典型的是瀏覽器)交互時彼此傳遞的一部分內容,內容可以是任意的,但要在允許的長度范圍之內。客戶端會將它保存在本地機器上(如IE便會保存在本地的一個txt文件中),由客戶端程序對其進行管理,過期的Cookie會自動刪除。每當客戶端訪問某個域下某個目錄中的網頁時,便會將保存在本地並且屬於那個域下對應目錄的有效Cookie信息附在網頁請求的頭部信息當中一並發送給服務端。

2、Cookie文件的保存位置

  不同的客戶端,其Cookie的保存方式、保存位置各不相同,這里只說一下Windows系統中IE的Cookie文件保存位置。

  在Windows 2000/XP系統中,Cookie默認保存在C:\Documents and Settings\<username>\Cookies\目錄下(此處的<username>為你登錄系統時使用的用戶名,在開始->運行中輸入cookies便可打開該目錄),命名規則為<username>@<domain>.txt。

  與2000/XP不同的是,在Windows 95/98/ME系統中Cookie文件默認是保存在C:\Windows\Cookies\目錄下的。

3、Cookie文件的格式

  IE的Cookie文件實際上就是一個txt文本文件,只不過換行符標記為Unix換行標記(0x0A),由於記事本對Unix換行標記不兼容,打開后內容全在一行看起來不方便,我們可以用EditPlus或UltraEdit-32打開,打開之后,會看到形式如下的內容:
name
value
domain/
1600
1263382784
30020896
452781968
30020892
*
每一行的內容說明:

英文說明:
Line Summary
1 The Variable Name
2 The Value for the Variable
3 The Website of the Cookie’s Owner
4 Optional Flags
5 The Most Significant Integer for Expired Time, in FILETIME Format
6 The Least Significant Integer for Expired Time, in FILETIME Format
7 The Most Significant Integer for Creation Time, in FILETIME Format
8 The Least Significant Integer for Creation Time, in FILETIME Format
9 The Cookie Record Delimiter (a * character)

中文說明:
第一行 Cookie變量名
第二行 Cookie變量值
第三行 該Cookie變量所屬域,形如csdn.net/、blog.csdn.net/或blog.csdn.net/lixianlin/
第四行 可選標志(cooke是否加密?
第五行 該Cookie過期時間(FILETIME格式)的高位整數
第六行 該Cookie過期時間(FILETIME格式)的低位整數
第七行 該Cookie創建時間(FILETIME格式)的高位整數
第八行 該Cookie創建時間(FILETIME格式)的低位整數
第九行 Cookie記錄分隔符(為一個星號* )

補充一下,第三行中Cookie變量所屬域,如csdn.net/,它是一個根域,也就是一級域,表示該Cookie變量在該根域下的所有目錄中的網頁都有效,不管訪問該域下的哪個目錄中的網頁,瀏覽器都會將該Cookie信息附在網頁頭部信息當中發送給服務端;blog.csdn.net/,是一個二級域,表示該Cookie只對blog這個二級域下目錄中的網頁有效;blog.csdn.net/lixianlin/,是一個二級域下的目錄,只有訪問blog這個二級域下lixianlin這個目錄中的網頁時,才會把該Cookie信息附在請求頭部信息當中發送給服務端。需要指出的是csdn.net/和www.csdn.net/並不相同,前者是根域,后者是一個二級域,只是人們習慣了www這樣的形式,所以大多數的網站首頁都用http://www.xxx.com/這樣的二級域來訪問。

附FILETIME格式定義:
typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;

Cookie 文件只是個純粹的文本文件,以換行符(ASCII=10)為分隔符
可以使用 TStringList 讀取,會自動分行的
格式如下

a_cookie
0.123
my.demo.site
1600
1589052800
30634450
672816768
29899592
*

其中
第1行為 Cookie 名稱
第2行是 Cookie 的值
第3行是 Cookie 所屬站點的地址
第4行是個標記值(注:准確來說應該是表示該Cookie是否被加密)
第5行為超時時間的低位(Cardinal/DWORD)
第6行為超時時間的高位
第7行為創建時間的低位
第8行為創建時間的高位
第9行固定為 * ,表示一節的結束
需要注意的是這里使用的時間並非 Delphi 的 TDateTime,而是 FILETIME(D里為對應的TFileTime)
一個文件可能包含有多個節,按上面的格式循環即可

附VC++6.0解析時間相關代碼:

01.#include "stdafx.h"   
02.#include "Windows.h"   
03.  
04.int main(int argc, char* argv[])  
05.{  
06.    FILETIME ft;  
07.    ft.dwLowDateTime=1263382784;  
08.    ft.dwHighDateTime=30020896;  
09.  
10.    SYSTEMTIME st;  
11.  
12.    FileTimeToSystemTime(&ft,&st);  
13.  
14.    printf("%04d-%02d-%02d %02d:%02d:%02d\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);  
15.  
16.    return 0;  
17.} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM