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

cookie簡單介紹

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

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

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

多頁面共享cookie問題

有時某個網站咱們想登陸多個帳號,可是會發現登陸新的帳號後,舊帳號就退出了,即使打開多個瀏覽器操做結果也是同樣的。這是由於新登陸帳號的cookie覆蓋了舊帳號的cookie,舊帳號天然就失效了。
google chrome提供了一種「無痕窗口」模式,在菜單欄能夠打開無痕窗口,該模式不會保存cookie等網站信息,旨在保護用戶隱私。發如今該模式下登陸的帳號和在普通頁面上登陸的帳號,能夠同時保持在線,其實就是由於cookie等信息存儲在不一樣的位置,不會互相覆蓋。cookie

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

單頁面cookie存儲位置設置

解決上述問題,天然想到把每一個頁面的cookie單獨存儲就行了。在建立瀏覽器時經過CefRequestContextSettings能夠指定頁面cookie等信息存儲位置,以下代碼:google

// 建立瀏覽器 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=253spa

相關文章
相關標籤/搜索