1

在 Delphi XE8 VCL Form Aplication 中,TEmbeddedWB我使用以下方法获取 cookie:

CookieStr := EmbeddedWB1.Cookie;
CodeSite.Send('CookieStr', CookieStr);

这是结果(例如):

名称1=值1;名称2=值2;名称 3=值 3

但是,如您所见,这仅获取 cookie 的名称

那么如何获取其他 cookie 字段,例如pathexpiration date等?

4

1 回答 1

0

这是解决方案:

首先,我们需要让我们熟悉 Winapi FILETIME 结构

然后从这里获取 IE cookie 文件:

C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies\

name=value现在查找与您获得的相同对的 cookie 文件TEmbeddedWB.Cookie

下面是一个 IE cookie 文件内容的示例,我们从中获取数据:

在此处输入图像描述

(与活着的人或其他权威的相似之处纯属偶然,并非有意!)

我们可以从红色注释中看到各种数字的含义。

这是破译这些数字的源代码:

uses Winapi.Windows;

function ConvertWinapiFileTimeLoHiValuesToDateTimeStr(const AFTLoValue, AFTHiValue: Cardinal): string;
const
  InvalidDate = '01/01/80 12:00:00 AM';
var
  lCookieFileTime: TFileTime;
  lDosDT: Integer;
  lLocalFileTime: TFileTime;
begin
  lCookieFileTime.dwLowDateTime  := AFTLoValue;
  lCookieFileTime.dwHighDateTime := AFTHiValue;

  FileTimeToLocalFiletime(lCookieFileTime, lLocalFileTime);
  if FileTimeToDosDateTime(lLocalFileTime, Longrec(lDosDT).Hi, Longrec(lDosDT).Lo) then
  begin
    try
      Result := DateTimeToStr(FiledateToDatetime(lDosDT));
    except
      Result := InvalidDate;
    end;
  end
  else
    Result := InvalidDate;
end;

现在我们可以将此函数与上述 cookie 文件中的数字一起使用,例如:

CodeSite.Send('Expiration Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2496134912, 30471078));
CodeSite.Send('Modified Date', ConvertWinapiFileTimeLoHiValuesToDateTimeStr(2624224682, 30465043));

这会给我们这个结果:

在此处输入图像描述

于 2015-08-26T16:10:20.867 回答