cookies - Xamarin WKWebView 和 Cookie

标签 cookies xamarin.forms xamarin.ios wkwebview

我有一个 Xamarin Forms 应用程序,它使用 cookie 来跟踪登录状态并同时使用 HTTPRequest 和 Webview,因此两者都需要共享 cookie。对于 UIWebView,这些 cookie 是共享的,无需我进行任何额外的管理;对于 WKWebView,情况似乎并非如此。我一直在寻找有关如何使用 WKWebView 处理 cookie 的解释或如何在这两个对象之间手动检索和设置 cookie 的示例,但无法找到任何内容。如何获取在使用 UIWebView 和 WKWebView 时所依赖的 cookie 行为?

最佳答案

当我尝试实现 WKNamvigationDelegate 时,未调用 WebView OnLoadFinished,因此加载完成后我的加载指示器仍然存在。最终对我有用的是在我的 iOS CustomWebViewRenderer 的构造函数中,我调用此函数来清除任何现有的 cookie 并将任何 cookie 从 HTTP 共享存储复制到 webview 中:

protected async void SetCookies()
{
    var dataStore = WKWebsiteDataStore.DefaultDataStore;
    var cookies = NSHttpCookieStorage.SharedStorage.Cookies;
    var oldcookies = await dataStore.HttpCookieStore.GetAllCookiesAsync();
    foreach (var cookie in oldcookies)
    {
        await dataStore.HttpCookieStore.DeleteCookieAsync(cookie);
    }
    foreach (var cookie in cookies)
    {
        await dataStore.HttpCookieStore.SetCookieAsync(cookie);
    }
} 

为了从 webview 获取 cookie,我在共享代码中存在一个 CustomWebView,它使用 OnShouldLoad 来检测成功登录的指示,然后调用平台特定的代码。这是为了处理 Android cookie 而创建的,但现在也适用于 iOS。 iOS 实现清除任何现有的 HTTP 共享存储 cookie,并将 cookie 从 webview 复制到共享存储中。

public async Task GetCookiesFromWebview()
{
    var dataStore = WKWebsiteDataStore.DefaultDataStore;
    var cookies = await dataStore.HttpCookieStore.GetAllCookiesAsync();
    var oldcookies = NSHttpCookieStorage.SharedStorage.Cookies;
    foreach (var cookie in oldcookies)
    {
        NSHttpCookieStorage.SharedStorage.DeleteCookie(cookie);
    }
    foreach (var cookie in cookies)
    {
        NSHttpCookieStorage.SharedStorage.SetCookie(cookie);
    }
    return;
}

关于cookies - Xamarin WKWebView 和 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61828868/

相关文章:

python - python中使用cookielib模拟浏览器获取url

javascript - 使用客户端IP作为cookie,识别重复访问并在第一次访问后显示消息

python - 如何在 Python 中插入 cookie 以进行网络抓取?

php - openssl_random_pseudo_bytes() 应该使用什么长度?

Xamarin.Forms:在子文件夹中组织图像

listview - 如何在 ViewModel 中绑定(bind) ListView 的 ItemTapped 属性以导航详细信息页面?

xamarin.forms - 如何在 Xamarin.Forms 的每个平台中访问公共(public)下载文件夹

c# - 带有自定义 View 的 UIBarButtonItem

c# - Monotouch UITableView 或 MonoTouch.Dialog

ios - Xamarin iOS Geolocator 后台服务在大约 30 分钟后死亡