Xamarin.Forms安卓WebView应用关闭后cookie被清除 如何保留登录状态
Xamarin.Forms安卓WebView登录态持久化解决方案
核心原因
Xamarin.Forms封装的安卓WebView默认没有开启Cookie持久化配置,应用进程销毁后内存中的Cookie会被清空,导致重启后登录态丢失。
修复步骤
1. 安卓平台全局配置Cookie规则
在安卓项目MainActivity.cs的OnCreate方法中,加载WebView前添加以下配置:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); // 新增Cookie持久化配置 if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) { CookieManager.Instance.SetAcceptThirdPartyCookies(webView, true); } CookieManager.Instance.AcceptCookie(); // 强制将内存Cookie同步写入磁盘 CookieManager.Instance.Flush(); LoadApplication(new App()); }
2. 自定义WebView渲染器(可选,兼容更多场景)
如果全局配置不生效,可在安卓项目添加自定义渲染器,在WebView初始化时配置存储规则:
using Android.Content; using Android.Webkit; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; // 替换为你自己的项目命名空间 [assembly: ExportRenderer(typeof(WebView), typeof(YourAppName.Droid.CustomWebViewRenderer))] namespace YourAppName.Droid { public class CustomWebViewRenderer : WebViewRenderer { public CustomWebViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) { base.OnElementChanged(e); if (Control != null) { // 开启Cookie支持 CookieManager.Instance.AcceptCookie(); CookieManager.Instance.SetAcceptThirdPartyCookies(Control, true); // 开启DOM存储和缓存,适配用LocalStorage存登录态的站点 Control.Settings.DomStorageEnabled = true; Control.Settings.SetAppCacheEnabled(true); Control.Settings.CacheMode = CacheModes.Default; } } } }
3. 原有加载逻辑保持不变
你现有代码无需修改,直接使用即可:
var wbURL = "https://www.example.com/login/"; webrowser.Source = wbURL;
注意事项
- 不要在业务逻辑中调用
CookieManager.Instance.RemoveAllCookie()、ClearHistory()等清空方法,避免登录态被误删 - 安卓10及以上系统Cookie持久化逻辑已由系统自动优化,
Flush()方法会异步执行磁盘写入,不会阻塞主线程
内容的提问来源于stack exchange,提问作者Ravinder Godara
相关产品推荐
相关产品推荐

