使用CefSharp在.Net程式中嵌入Chrome瀏覽器(八)——Cookie
CEF中的Cookie是通過CookieManager來管理的,可以用它來設定傳送的Cookie。
傳送Cookie
傳送Cookie的一個基本示例如下:
var
cookieManager =
_chrome
.
GetCookieManager
();
cookieManager.
SetCookie
(
"http://localhost:5000/test"
,
new
Cookie
()
{
Name
=
"name"
,
Value
=
"123"
});
不過,GetCookieManager函式只有ChromiumWebBrowser初始化完成後才能使用,可以通過_chrome.IsBrowserInitialized函式判斷,或者感知IsBrowserInitializedChanged事件。
傳送全域性Cookie
本身系統有一個全域性的CookieManager,用它可以設定所有請求的Cookie
var
cookieManager =
Cef
.
GetGlobalCookieManager
();
await
cookieManager.
SetCookieAsync
(
"http://127.0.0.1:5000"
,
new
Cookie
()
{
Name
=
"aaa"
,
Value
=
"bbb"
,
});
這種方式下,所有的請求都預設攜帶該cookie,用來傳遞使用者的身份資訊等非常方便。
讀取Cookie
如果要獲取伺服器返回的Cookie,則需要自己實現一個ICookieVisitor
class
CookieVisitor
:
ICookieVisitor
{
public
bool
Visit
(
Cookie
cookie,
int
count,
int
total,
ref
bool
deleteCookie)
{
var
name = cookie.
Name
;
var
value = cookie.
Value
;
return
true
;
}
public
void
Dispose
()
{
}
}
然後在CookieManager中關聯CookieVisitor,當頁面載入完成後,會呼叫Visitor訪問cookie。
_chrome
=
new
ChromiumWebBrowser
();
_chrome
.
Address
=
"http://127.0.0.1:5000/test"
;
_chrome
.
FrameLoadEnd
+=
(_s, _e) =>
{
var
cookieManager =
_chrome
.
GetCookieManager
();
cookieManager.
VisitAllCookies
(
new
CookieVisitor
());
};