Xamarin OnPageFinished ---获取Cookie

时间:2019-01-09 20:58:22

标签: android xamarin visual-studio-2015

我正在为WebView覆盖此方法。我正在使用适当的域。使用Android模拟器进行调试时,我只会看到所有Cookie的部分列表。没有列出我特别要求的值。有什么建议么?下面的源代码。

 public override void OnPageFinished(WebView view, string url)
            {
                base.OnPageFinished(view, url);
                _cookieManager.Flush();                
                string customerId = null;
                var cookies = _cookieManager.GetCookie(Constants.DCH_DOMAIN);
                Log.Info(TAG, string.Format("Cookies retrieved as {0}.", cookies));
                if (cookies != null)
                {
                    string[] tempList = cookies.Split(';');
                    foreach (var pair in tempList)
                    {
                        if (pair.Contains("wishlist_customer_id"))
                        {
                            string[] tempPair = pair.Split('=');
                            customerId = tempPair[1];
                            if (customerId != null)
                            {
                                Log.Info(TAG, string.Format("Customer ID retrieved as {0}.", customerId));
                                PCLStorage(customerId);
                            }                            
                        }
                    }
                }

更新,还有另一个域在此Web会话中存储cookie。四个cookie之间的路径,HTML,相同的站点,安全性等没有什么不同。我将附加工作站上的Chrome外观,显示这四个cookie。然后,我将附加我的Android模拟器的设备日志的外观,并在其中基于子类WebViewClient输出cookie集合。四个cookie中只有两个出现在其中。我在检索cookie之前插入了SystemClock.Sleep(5000),以便使它们也有机会完全填充。

Chrome session

WebViewClient session

2 个答案:

答案 0 :(得分:1)

您应该在加载网址之前执行cookie同步,以确保完整的cookie数据,如:

_cookieManager.flush ();
webView.loadUrl(url);

然后通过OnPageFinished方法获取cookie:

public override void OnPageFinished(WebView view, string url)
        {
            base.OnPageFinished(view, url);         
            string customerId = null;
            var cookies = _cookieManager.GetCookie(url);
            Log.Info(TAG, string.Format("Cookies retrieved as {0}.", cookies));
            if (cookies != null)
            {
                string[] tempList = cookies.Split(';');
                foreach (var pair in tempList)
                {
                    if (pair.Contains("wishlist_customer_id"))
                    {
                        string[] tempPair = pair.Split('=');
                        customerId = tempPair[1];
                        if (customerId != null)
                        {
                            Log.Info(TAG, string.Format("Customer ID retrieved as {0}.", customerId));
                            PCLStorage(customerId);
                        }                            
                    }
                }
            }

答案 1 :(得分:0)

感谢Leo Zhu,该问题已解决。显然, 之前 ,我加载了刷新CookieManager实例所需的WebView URL。这导致该特定资源的所有cookie出现并可供查询。希望这可以对遇到类似挑战的其他人有所帮助!