上面的答案是错误的。 CInternetSession 确实处理 cookie。如果本次会话下有http响应
返回一个 Set-Cookie 标头,其中的 cookie 将由会话对象自动保存并返回
在后续请求中发送到服务器。无需使用 SetCookie()。
但有一些注意事项和陷阱:返回的没有过期日期的 Cookie 是会话 Cookie
并且只保存在 MEMORY 中。当 CInternetSession 对象被销毁时,它们将永远消失。
可以在 CInternetSession 对象中使用 SetOption 和禁用 cookie 的请求设置标志。
请参阅标志 INTERNET_OPTION_SUPPRESS_SERVER_AUTH 和 INTERNET_FLAG_NO_COOKIES。小心你没有这样做。
小心缓存。 GET 一次脚本以获取 cookie,然后再次 GET 以打印返回的 cookie。
而且它不起作用!不打印 cookie。为什么?因为“文件”被缓存了。在第二次调用 wininet 没有
联系服务器,它会再次给你旧的响应,当然没有打印任何 cookie。避免
这你必须使用标志 INTERNET_FLAG_RELOAD。本质是这样的:
int flags = INTERNET_FLAG_RELOAD;
int port = INTERNET_DEFAULT_HTTP_PORT;
CHttpConnection *connection = session.GetHttpConnection("www.example.com", flags, port);
CHttpFile *fil = connection->OpenRequest(CHttpConnection::HTTP_VERB_GET, "cgi-bin/test.pl",
0,1,0, "HTTP/1.1", flags);
fil->SendRequest();
另外,请注意,如果 cookie 是由 URL http://example.com/cgi-bin/test.pl 的脚本设置的,它与 URL http://example.com/cgi-bin/ 相关联,所以将返回到脚本 http://example.com/cgi-bin/hello.pl 。不过,cookie 标头可以改变这种行为。