如何在Xamarin WebView中访问cookie?

在我们的Xamarin应用程序中,我们需要允许用户使用自己的SSO解决方案登录。

这在我们的iOS应用程序中的工作方式是我们打开一个带有Web视图的控制器并将其指向我们的站点,并继续观察cookie,直到他们回到我们的站点上,并使用指示他们已登录的cookie但是在Xamarin中,我看不出如何访问WebView的cookie。 我们的Xamarin应用程序运行在Windows 8.1和WinPhone 8.1上,但它将在某些时候扩展到Android,因此我需要一个跨平台的解决方案。

那么,我如何在Xamarin WebView中访问cookie?

您需要在PCL-Project中创建自定义控件,然后为每个平台添加自定义Web视图。 平台的secific实现然后得到coockies,你可以从你的pcl-webview使用它。

在Android上,您可以使用以下代码获取Cookie:

var cookieHeader = CookieManager.Instance.GetCookie(url); 

在iOS上:

 NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage; 

github上的源代码: https : //github.com/seansparkman/CookiesWebView

关于每个移动平台中的Cookie的好处是它们是应用程序中的共享cookie容器。 WebView不支持平台所做的Cookie,因此甚至HTTP调用和不同的WebView都可以访问相同的共享cookie容器。

然而,从某些平台中拉出它们可能很棘手,因为需要反思。 如果您的SSO解决方案只要求他们首先登录网页,那么他们都会共享相同的cookie,您无需执行任何操作。

Android的

Android为HTTP和WebView提供了2个独立的cookie容器。 这是奇怪的。 因此你有

  using System.Net.Http; private static CookieContainer _cookieContainer = new System.Net.CookieContainer(); private static Android.Webkit.CookieManager _cookieManager = Android.Webkit.CookieManager.Instance; 

使用HTTP请求即可执行此操作

 HttpClient client = new HttpClient(new HttpClientHandler() { CookieContainer = cookieContainer }); 

WebView使用另一个,您可以在每个容器中获取和设置cookie。

iOS版

这个很容易,它们都存储在

  NSHttpCookieStorage.SharedStorage.Cookies 

WinRT的

 using Windows.Web.Http; //NOT: Microsoft.Net.Http var filter = new HttpBaseProtocolFilter(); HttpClient client = new HttpClient(filter); // Use this, while it comes from an instance, its shared across everything. filter.CookieManager