IE Cookie文件格式说明

 更新时间:2009年12月31日 02:38:50   作者:  
前几天写了个工具 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;


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

相关文章

  • xmind2022下载非试用超详细图文教程

    xmind2022下载非试用超详细图文教程

    这篇文章主要介绍了xmind2022下载非试用(超详细 图文预警),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • 4G与5G的区别有哪些

    4G与5G的区别有哪些

    说起5G,现在在网络中已经是很常见的了,亦是未来生活的新标杆,接下来我们便一起来学习5G和4G有什么不同
    2021-08-08
  • UTC时间、GMT时间、本地时间、Unix时间戳的具体使用

    UTC时间、GMT时间、本地时间、Unix时间戳的具体使用

    本文主要介绍了UTC时间、GMT时间、本地时间、Unix时间戳的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • MobaXterm 安装使用图文教程

    MobaXterm 安装使用图文教程

    MobaXterm是一款SSH客户端,连接并操作Linux服务器,这篇文章主要介绍了MobaXterm安装使用图文教程,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】

    人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】

    这篇文章主要介绍了人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • iisschlp.wsc [88,25] 属性值无效 : progid

    iisschlp.wsc [88,25] 属性值无效 : progid

    今天在运行iisapp.vbs时候提示Windows Script Component - file://C:WINDOWSsystem32iisschlp.wsc [88,25] 属性值无效 : progid,原来是因为安全设置惹的祸,以前就是因为这个一直没解决
    2014-07-07
  • 软件测试面试如何测试一个杯子

    软件测试面试如何测试一个杯子

    本文主要介绍软件测试面试如何测试一个杯子,这里帮大家整理了详细的面试资料,和面试需要准备的知识点,有兴趣的小伙伴可以参考下
    2016-08-08
  • 使用git命令将本地代码上传到GitHub

    使用git命令将本地代码上传到GitHub

    这篇文章介绍了使用git命令将本地代码上传到GitHub,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • git版本库创建拓展添加文件到版本库教程

    git版本库创建拓展添加文件到版本库教程

    这篇文章主要为大家介绍了git版本库创建拓展添加文件到版本库教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • ChatGPT帮我看下这段代码有什么问题

    ChatGPT帮我看下这段代码有什么问题

    今天一个很简单的功能,触发了一个 BUG,处理后我想起了最近爆火的 ChatGPT,于是我尝试测试 ChatGPT 能否发现这个 BUG,这篇文章会先介绍功能代码,然后手动分析 BUG 原因,需要的朋友可以参考下
    2023-02-02

最新评论