通过p3p安全策略解决,只需在写入cookie的地方加入p3p策略就好。
QString p3p = "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR";
rtn = setCookieA(QString("http://"+cookie_url).toStdString().c_str(), QString(cookie_name+"="+cookie).toStdString().c_str(), p3p.toStdString().c_str());
static DWORD setCookieA(const char* url, const char* cookie, const char* sP3P)
{
DWORD flags = 0;
char cok[8192]; strcpy(cok, cookie); strlwr(cok);
if (strstr(cok, "httponly")) flags = INTERNET_COOKIE_HTTPONLY;
char* domain = strstr(cok, "domain=");
if (domain) {
char dns1[512]; char dns2[512]; int i; int l1 = strlen(url);
for (i = 7; i < l1 &&i < 512; ++i) {
if (url[i] == '/')break;
dns1[i - 7] = tolower(url[i]);
}
dns1[i - 7] = 0;
for (i = 7; domain[i] && i < 512; ++i) {
if (domain[i] == ';' || isspace(domain[i]))break;
dns2[i - 7] = domain[i];
}
dns2[i - 7] = 0;
if (!strstr(dns1, dns2)) { //不是同一个域名
flags |= INTERNET_COOKIE_THIRD_PARTY;
}
}
//P3P
const char* p3p = NULL;
if (sP3P && strcmp(sP3P, "-") != 0 && strlen(sP3P) > 0) {
flags |= INTERNET_COOKIE_EVALUATE_P3P;
p3p = sP3P;
}
//wchar_t * cookie_wchar_t = ANSIToUnicode(cookie);
//logFile(QString::fromWCharArray(cookie_wchar_t));
//free(cookie_wchar_t);
DWORD ret;
ret = real_InternetSetCookieExA(url, NULL, cookie, flags, (DWORD_PTR)p3p);
return ret;
}
网友评论