当前位置: 首页 > 图文教程 > 网络编程 > 其它综合 > IE Cookie文件格式说明

其它综合
多种语言下获取当前页完整URL及其参数
asp php 清空access mysql mssql数据库的代码
ibatis简单实现与配置
初探 SOA
初探 SOA(补充)
java asp分析各种搜索引擎的关键字,自动识别url 中关键字的编码
qqwry.dat的数据结构图文解释
UE、UI、UCD、Interaction Design、UED、UX、HCI、Usability,IA
IE 打开服务器下的MHT文件的实现方法
unicode utf-8 gb18030 gb2312 gbk各种编码对比
Http 状态代码 指示(ajax,bs结构用的到)
CSDN 博客的代码高亮问题自己修复
电子邮件 退信原因大全
支付宝 接口开发帮助(asp,php,asp.net,jsp)
在CODEIGNITER中 在CI中引入外部的JS与CSS呢
获取键盘键的值 集合 方便监控键盘事件
字符编码详解(基础)
国外开发者谈为何放弃PHP而改用Python
提示“处理URL时服务器出错”和“HTTP 500错误“的解决方法
开发人员一定要加入收藏夹的网站 推荐

其它综合 中的 IE Cookie文件格式说明


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 252 ::
收藏到网摘: n/a

前几天写了个工具 CookieAdmin 来查看 IE 的 Cookie 有人问到实现原理,就写了这篇文章 我不善于写文档或文章,所以还是代码说话吧 IE 的 Cookie 文件保存在 ?:\Documents and Settings\<user>\Cookies 目录,后缀为.txt
可以直接使用 API SHGetFolderPath 取得 Cookie 文件的保存目录
不过我没发现 Delphi2007 有这个 API 的声明,所以自己声明了一下
代码如下(发现代码高亮支持 Pascal 了,呵呵)

GetCookieFolder
复制代码 代码如下:

function SHGetFolderPath(hwndOwner: HWND; nFolder: Integer; hToken: HWND;
dwFlags: Word; pszPath: PChar): Boolean; stdcall; external shell32 name 'SHGetFolderPathA';
function GetCookieFolder: string;
var
P: array[0..MAX_PATH] of Char;
begin
SHGetFolderPath(0, CSIDL_COOKIES, 0, 0, @P[0]);
Result := IncludeTrailingBackslash(P);
end;

注意 shell32 常量定义在 ShellAPI.pas 里,CSIDL_COOKIES 定义在 ShlObj.pas 里,记得引用
枚举 Cookie 文件
GetCookieFiles
复制代码 代码如下:

procedure GetCookieFiles(APath: string; AList:TStrings);
var
Sr: TSearchRec;
begin
if FindFirst(APath + '*.txt', faArchive, Sr) = 0 then
begin
repeat
if Sr.Name[1] = '.' then Continue;
AList.Add(Sr.Name);
until FindNext(Sr) <> 0;
FindClose(Sr);
end;
end;

下面才是重点,Cookie 文件的格式,呵呵
Cookie 文件只是个纯粹的文本文件,以换行符(ASCII=10)为分隔符
可以使用 TStringList 读取,会自动分行的
格式如下
复制代码 代码如下:

a_cookie
.123
my.demo.site
*

其中
第1行为 Cookie 名称
第2行是 Cookie 的值
第3行是 Cookie 所属站点的地址
第4行是个标记值(注:准确来说应该是表示该Cookie是否被加密)
第5行为超时时间的低位(Cardinal/DWORD)
第6行为超时时间的高位
第7行为创建时间的低位
第8行为创建时间的高位
第9行固定为 * ,表示一节的结束
需要注意的是这里使用的时间并非 Delphi 的 TDateTime,而是 FILETIME(D里为对应的TFileTime)
一个文件可能包含有多个节,按上面的格式循环即可
下面的代码将上述时间转换为 D 里的 TDateTime

ConvertToDateTime
复制代码 代码如下:

function FileTimeToDateTime(FT: TFileTime): TDateTime; inline;
var
ST: TSystemTime;
begin
FileTimeToLocalFileTime(FT, FT);
FileTimeToSystemTime(FT, ST);
Result := SystemTimeToDateTime(ST);
end;
function ConvertToDateTime(L, H: Cardinal): TDateTime;
var
FT: TFileTime;
begin
FT.dwLowDateTime := L;
FT.dwHighDateTime := H;
Result := FileTimeToDateTime(FT);
end;

怎么样,确实很简单吧?呵呵