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

3
我正在使用Xamarin创建一个Android应用程序,使用WebView来显示网站。用户登录网站后会创建一个Cookie,并应存储在WebView中。该应用程序中有两个WebView,一个用于显示页面,如果页面中有文本框,则在第二个WebView中打开该页面。
现在,当用户尝试登录时,将打开第二个WebView(因为登录页面包含文本框),用户输入详细信息并单击下一步按钮后,第二个视图将关闭,下一页将在第一个WebView中打开。登录后,将创建Cookie并存储在WebView中,用户下次打开应用程序时,它不会要求进行登录。这就是应该发生的事情。
问题是,如果用户输入详细信息并单击下一步按钮(下一页正在在第一个WebView中加载)然后立即退出应用程序,然后再次启动应用程序,则Cookie不存在,应用程序再次要求进行登录。
在登录后,我在WebView的页面完成事件上读取Cookie值并在Toast中显示。如果我在登录后退出应用程序,则可以在Toast中获取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个回答

2

为了获得最佳性能,Cookie 存储在 RAM 中,并每五分钟同步到永久存储器中。您需要在 OnPageFinished 方法中手动强制执行 CookieSyncManager 以同步 Cookie,以便在再次启动应用程序时仍然可用。有关更多详细信息,请参阅CookieSyncManager 文档


谢谢,那个方法可行。但是CookieSyncManager类已经过时了,我应该使用什么替代它呢? - Lalit Kumar
很高兴听到这个消息。如果解决了你的问题,请随意将答案标记为正确。关于第二个问题,这个帖子会给你一个答案。 - Timo Salomäki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接