从Xamarin.IOS中的WebView控件中加载的网站获取会话ID

时间:2017-09-21 12:14:05

标签: session xamarin cookies webview xamarin.ios

我在上周开始使用Xamarin(Visual Studio 2017)开始开发iOS应用程序,虽然文档一方面看起来非常好,但另一方面它也非常基础。

我一直在看Pluralsight上的一些内容,它给了我一些基础知识,但我试图找到如何访问网站会话的详细信息时遇到了问题在WebView控件中。

我目前的代码非常简单,我调用WebView的{​​{1}}方法,传入我想要显示的网站的网址。 Url网站已经改为保护不那么无辜......

LoadRequest

作为该网站的开发者之一,我知道它会创建一个我需要iOS应用才能访问的自定义会话ID。

在Visual Studio中使用Intellisense,输入" WebView。"给了我没有属性或方法的单词" cookie"或"会话"在那里,我无法看到任何其他可能会提示我访问我需要的数据。

我还添加了以下内容以获取一系列cookie,并在此之后添加断点并观察cookie数组后,我看不到任何包含有关会话中存储的数据的特定信息的内容(包括会话ID)。

var url = "https://MySslSite.com";
WebView.LoadRequest(new NSUrlRequest(new NSUrl(url)));

1 个答案:

答案 0 :(得分:0)

您可以在WebView中加载网站后访问Cookie。因此,您需要为WebView创建自定义渲染器。并且,您可以使用 DidFinishNavigation 方法访问Cookie。这是 IWKNavigationDelegate 方法。因此,您需要在 CustomWebViewRenderer 类中继承它。

代码

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]
namespace MyApp.iOS.Renderers
{
    public class CustomWebViewRenderer : ViewRenderer<CustomWebView, WKWebView>,IWKNavigationDelegate
    {
        protected override void OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
        {
            base.OnElementChanged(e);
            if (Control == null)
            {
                var config = new WKWebViewConfiguration { UserContentController = new WKUserContentController() };
                var webView = new WKWebView(Frame, config);
                webView.NavigationDelegate = this;
                SetNativeControl(webView);
            }
        }

        [Export("webView:didFinishNavigation:")]
        public void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
        {
            NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage;
            foreach (NSHttpCookie cookie in storage.Cookies)
            {
                storage.DeleteCookie(cookie);
            }
            NSUserDefaults.StandardUserDefaults.Synchronize();
        }
    }
}