我正在从 C# 代码发送一个 HTTPWebRequest,作为响应,我得到一个包含会话 ID 的 cookie。我无法在响应的公共/非公共成员中找到 cookie。但是 fiddler 正在捕获 cookie,它的路径是“/”。谁能告诉我我应该在哪里找这个饼干?我检查了文件夹“C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Cookies”,但它不存在。
4 回答
根据浏览器的不同,Cookie 可能物理存储在不同的位置。
我认为您最好HttpWebRequest
使用 cookie。
请参阅有关将 a 添加到请求对象的此问题的答案。CookieContainer
每个浏览器都将 cookie 存储到不同的位置,例如
Cookie 信息存储在配置文件文件夹中的两个文件中。从 Firefox 3.0 和 SeaMonkey 2.0 开始,cookie 信息存储在文件 cookies.sqlite 和 permissions.sqlite 中。在 Firefox 2 或更低版本和 Mozilla Suite/SeaMonkey 1.x 中,cookie 存储在 cookies.txt 文件中,cookie 站点权限存储在 hostperm.1 文件中。文件描述 cookies.sqlite cookies.txt 保存您的所有 cookie,包括登录信息、会话数据和首选项。permissions.sqlite hostperm.1 保存有关您允许或禁止哪些站点设置 cookie、显示图像、打开弹出窗口和启动扩展安装的首选项。
Cookie 存储取决于您的浏览器和操作系统。在较旧的浏览器中,它们只是存储在名为“Cookies”之类的文件路径中。大多数现代浏览器以某种加密方式存储 cookie,通常在 sqllite db 平面文件中。如果您可以通过实际的本地 cookie 存储(而不是使用浏览器的内置 cookie 浏览器)提供有关您尝试追踪的内容的更多信息,这将有助于获得有关在哪里查找或替代您所拥有内容的更多信息头脑。
如果您想通过 HttpWebRequest 使用持久性 cookie,则需要导入wininet.dll来处理此问题(或者您自己处理持久性)。
MSDN 上有一个WebRequest.Create Method的社区内容部分的示例。
片段
[DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]
private static extern bool InternetGetCookie (string url, string name, StringBuilder data, ref int dataSize);
private static string RetrieveIECookiesForUrl(string url)
{
StringBuilder cookieHeader = new StringBuilder(new String(' ', 256), 256);
int datasize = cookieHeader.Length;
if (!InternetGetCookie(url, null, cookieHeader, ref datasize))
{
if (datasize < 0)
return String.Empty;
cookieHeader = new StringBuilder(datasize); // resize with new datasize
InternetGetCookie(url, null, cookieHeader, ref datasize);
}
// result is like this: "KEY=Value; KEY2=what ever"
return cookieHeader.ToString();
}