MFC調用CEF實現單頁面單COOKIE管理《轉》

cookie簡單介紹

cookie存儲了網站的一些很重要的信息,如用戶身份信息、常用設置、設置地理位置等等各種信息。
使用cef訪問網站時,如果設置了CefSettings.cache_path參數,則cookie等相關信息會保存在該目錄下,若未設置則會保存在程序的內存中。

    CefSettings settings;
    CefString(&settings.cache_path) = L"D:\\cefcookie";
C++

下圖是訪問 www.baidu.com 頁面保存在指定位置的網站數據,可以看的其中也包括Cookies信息:

多頁面共享cookie問題

有時某個網站我們想登錄多個賬號,但是會發現登錄新的賬號後,舊賬號就退出了,即便打開多個瀏覽器操作結果也是一樣的。這是因爲新登錄賬號的cookie覆蓋了舊賬號的cookie,舊賬號自然就失效了。
google chrome提供了一種“無痕窗口”模式,在菜單欄可以打開無痕窗口,該模式不會保存cookie等網站信息,旨在保護用戶隱私。發現在該模式下登錄的賬號和在普通頁面上登錄的賬號,可以同時保持在線,其實就是因爲cookie等信息存儲在不同的位置,不會互相覆蓋。

若設置了CefSetting.cache_path,則所有頁面cookie都會保存在該目錄下,當登錄某網站多個賬號時,cookie被覆蓋,就只能保持一個賬號在線了。若不設置cache_path則cookie會保存在內存中,登錄多個賬號時cookie同樣會被覆蓋。

單頁面cookie存儲位置設置

解決上述問題,自然想到把每個頁面的cookie單獨存儲就好了。在創建瀏覽器時通過CefRequestContextSettings可以指定頁面cookie等信息存儲位置,如下代碼:

// 創建瀏覽器
void CefHelper::CreateBrowser(CWnd* parent, CRect rc, CString strUrl, CString strCookiePath, bool bShow)
{
    m_handler = new CSimpleHandler(false);

    CefWindowInfo winInfo;
    winInfo.SetAsChild(parent->GetSafeHwnd(), rc);

    CefRequestContextSettings settings;
    CefString(&settings.cache_path).FromWString(wstring(strCookiePath));
    CefRefPtr<CefRequestContextHandler> handlerCookie = new WXRequestContextHandler(wstring(strCookiePath).c_str());
    CefRefPtr<CefRequestContext> rContext = CefRequestContext::CreateContext(settings, handlerCookie);

    CefBrowserSettings browserSettings;
    CefBrowserHost::CreateBrowser(winInfo, m_handler, wstring(strUrl).c_str(), browserSettings, rContext);
}
C++
 

文章導航

 http://www.itzhi365.com/?p=253

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章