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

Posted

技术标签:

【中文标题】Cookie 未保存在 Xamarin(Android)的 Web 视图中【英文标题】:Cookie not saving in Web view in Xamarin(Android) 【发布时间】:2016-12-02 21:42:29 【问题描述】:

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

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

问题是,如果用户输入详细信息并在单击下一个按钮后(下一页正在第一个 Web 视图中加载)并立即退出应用程序然后再次启动应用程序,那么 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】:

cookie 存储在 RAM 中以获得最佳性能,并每五分钟同步到永久存储。您需要手动强制 CookieSyncManager 同步您的 OnPageFinished 方法中的 cookie,以便在您再次启动应用程序时它们仍然可用。详情请参阅CookieSyncManager documentation。

【讨论】:

感谢工作,但是 CookieSyncManager 类已过时,我应该用什么来代替它 很高兴听到。如果它解决了您的问题,请随意将答案标记为正确。关于第二个问题,this thread会给你答案。

以上是关于Cookie 未保存在 Xamarin(Android)的 Web 视图中的主要内容,如果未能解决你的问题,请参考以下文章

Owin cookie身份验证设置cookie未保存在浏览器中

Cookie未保存在浏览器中

添加到主屏幕时,Cookie 未保存在 Safari 中

在 iOS Safari 上的浏览​​器会话之间未保存 Cookie

ASPXAUTH cookie 未保存

CORS - 服务器端 cookie 未保存在 chrome 浏览器上