【问题标题】:Cef Cookie Manager SetCookie always returns falseCef Cookie Manager SetCookie 总是返回 false
【发布时间】:2024-01-19 11:08:01
【问题描述】:

我正在做一个项目,在我的应用程序中加载一个 web 视图(使用 Visual Studio 2012)。在加载 web 视图之前,我发送一个 curl 请求以获取一些 access_token,我需要在该特定 web 视图的 cookie 中设置它,以便用户自动登录该 web 视图。因此,在 curl 的回调中,当我获得令牌时,我在 cef 全局 cookie 管理器上调用 setCookie,但它总是返回我 false

CefRefPtr<CefCookieManager> cookieManager=CefCookieManager::GetGlobalManager();
    CefString cefURL ;
    cefURL.FromString(url.GetUTF8String());
    bool retVal = cookieManager->SetCookie(cefURL,cookie);

我是不是做错了什么,是不是因为我在 curl 回调上做错了,这是一个单独的线程。

【问题讨论】:

    标签: c++ visual-studio curl webview chromium-embedded


    【解决方案1】:
    CefRefPtr<CefCookieManager> manager =
            CefCookieManager::GetGlobalManager(nullptr);
    DCHECK(manager.get());
    CefCookie cookie;
            CefString(&cookie.name).FromString(key);
            CefString(&cookie.value).FromString(value);
            CefString(&cookie.domain).FromString(domain);
            CefString(&cookie.path).FromString("/");
            cookie.has_expires = true;
            cookie.expires.year = 2099;
            cookie.expires.month = 1;
            cookie.expires.day_of_week = 1;
            cookie.expires.day_of_month = 1;
            std::string url = "https://" + domain;//eg:".*.com"
            //manager->SetCookie(url, cookie, nullptr);
            CefPostTask(TID_IO, NewCefRunnableMethod(manager.get()
                , &CefCookieManager::SetCookie
                , CefString(url.c_str()), cookie, nullptr));
    

    通过进程间通信设置,使用CefPostTask函数

    【讨论】:

    • 可能值得添加一个简短的解释为什么当 OP 的代码不起作用时它会起作用
    • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,包括说明 如何为什么 这解决了问题would really help 以提高您的帖子质量。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
    • 旧版本需要在 IO 线程上设置 cookie。可以在任何线程上调用具有回调作为参数的较新版本。 IPC 不相关