webbrowser IE与cef webkit共享cookie时遭遇iframe跨域无法获得cookie问题

通过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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容