Cookie文件说明

来源:互联网 发布:免费x站最新 域名 编辑:程序博客网 时间:2024/06/05 09:22
客户端发送Cookie setHeader("Cookie",cookieStrings); 
Hm_lvt_8289194a911f5d8567a26db6a3d2e49d=1442461863,1442540685,1442548420,1442992044; Hm_lpvt_8289194a911f5d8567a26db6a3d2e49d=1442992044; _5t_trace_sid=3bf26f16b9b12ab52813fbe3fd9bebcd; _5t_trace_tms=1
每个域名一个Cookie文件,但是里面存了很多Cookie,多个 Cookie(键值对)

cookie:adminstrator@sosolcom/(ZCSNPDGI.txt 打开后文件名随意的)

cad  Cookie变量名
UaXY3x2bdVDwH7UhzH0zng==  Cookie变量值
tanx.com/  该Cookie变量所属域
3584 可选标志(cooke是否加密?)
3379037440 该Cookie过期时间(FILETIME格式)的高位整数
617110110 该Cookie过期时间(FILETIME格式)的低位整数
3175100000 该Cookie创建时间(FILETIME格式)的高位整数
30468750 该Cookie创建时间(FILETIME格式)的低位整数
*  Cookie记录分隔符(为一个星号* )
cap
b09a
tanx.com/
3584
3379037440
617110110
3175260000
30468750
*
tcm
XXWRKckq8puMyVkjRdC8WQQQdR5tLvpJxspJ4MMPr887OFpN6Wqr7q/qOouIenEPCXQny4y8NTk=
tanx.com/
3584
3042368640
30474785
3175420000
30468750
*


Cookie文件格式



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
*
每一行的内容说明:

中文说明:
第一行 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解析时间相关代码:


#include "stdafx.h"
#include "Windows.h"


int main(int argc, char* argv[])
{
    FILETIME ft;
    ft.dwLowDateTime=1263382784;
    ft.dwHighDateTime=30020896;


    SYSTEMTIME st;


    FileTimeToSystemTime(&ft,&st);


    printf("%04d-%02d-%02d %02d:%02d:%02d\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);


    return 0;
}
0 0