在Xamarin(Android)的Web视图中不保存Cookie

时间:2016-07-28 13:08:55

标签: android cookies xamarin webview

我正在xamarin中创建一个Android应用程序。我正在使用Web视图来显示网站。用户登录网站后创建一个cookie,并应存储在Web视图中。应用程序中有两个Web视图,一个Web视图显示页面,如果页面中有任何文本框,则在第二个Web视图中打开该页面。

所以现在当用户尝试登录时,会打开第二个Web视图(因为登录页面包含文本框),在用户输入详细信息并单击下一个按钮后,第二个视图将关闭,并在第一个Web视图中打开下一个页面。登录后,将创建cookie并将其存储在Web视图中,并在用户下次打开应用程序时不要求登录。这是应该发生的事情。

问题是,如果用户输入详细信息并单击下一个按钮(下一页正在第一个Web视图中加载)并立即退出应用程序,然后再次启动应用程序,则cookie不存在,应用程序再次要求登录。 / p>

登录后,我正在阅读webview页面完成事件的cookie值并以吐司形式显示。如果我在登录后退出应用程序,我会在吐司中获取cookie值但当我再次启动应用程序时,cookie不再存在并且它要求我再次登录

public override void OnPageFinished (WebView view, string url)
        {
            try 
            {
                if (view.Url == Urls.URL_INDEX) 
                {
                    var cookieManager = CookieManager.Instance;
                    if (cookieManager != null) 
                    {
                        //getcookie string from the url
                        string cookie = cookieManager.GetCookie (view.Url);
                        if (!string.IsNullOrEmpty (cookie)) 
                        {
                            string[] cookies = cookie.Split (';');
                            foreach (var newcookie in cookies) 
                            {
                                if (newcookie.Trim().StartsWith (Constants.COOKIE_NAME)) 
                                {
                                    string cookieValue = newcookie.Substring (newcookie.IndexOf ('='));             
                                    Toast.MakeText(activity,cookieValue,ToastLength.Short).Show();
                                }
                            }
                        }
                    } 
                }
            }
            catch (Exception ex) 
            {
                Console.WriteLine ("Exception in storing cookie in Home Activity : "+ex.Message);
                Toast.MakeText (activity, "Exception : " + ex.Message,ToastLength.Long).Show();
            }
        }

我不知道为什么会这样,请帮忙。

1 个答案:

答案 0 :(得分:2)

Cookie存储在RAM中以获得最佳性能,并且每隔五分钟就会同步到永久存储器。您需要手动强制 $.ajax({ type: "POST", url: urlServer + "ws_alerts.asmx/ActualizarAlerta", data: '{' + '"id":' + id + ',"revision":"' + rev + '","purpose":"' + pur + '","change":"' + change + '","op":' + op + '}', dataType: "json", contentType: "application/json", timeout: 60000, error: function (xhr) { bootbox.alert("Ocurrio un error al procesar la peticion."); }, success: function (data) { bootbox.alert(data.d); } }); CookieSyncManager方式同步Cookie,以便在您再次启动应用程序时它们仍然可用。有关详细信息,请参阅CookieSyncManager documentation