在 Android WebView 中,登录 cookie 一直被删除的问题可能是由于 WebView 的 Cookie 管理策略导致的。默认情况下,WebView 在每次请求之后会删除所有的会话 cookie,这可能会导致登录 cookie 被删除。
要解决这个问题,可以尝试以下方法:
启用 Cookie: 确保已经启用了 Cookie,可以在 WebView 初始化的地方添加以下代码:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
这样就允许 WebView 接收和存储 Cookie。
设置 Cookie 的域名: 如果你的登录 cookie 是通过某个特定的域名设置的,你可以在登录之后手动设置 Cookie 的域名,以确保它与 WebView 的域名匹配。例如:
String domain = "example.com"; // 替换为你的域名
String cookie = "cookie_name=cookie_value; domain=" + domain;
CookieManager.getInstance().setCookie(url, cookie);
这样设置的 Cookie 将与 WebView 的域名匹配,并且不会被删除。
自定义 Cookie 策略: 如果以上方法无效,你可以尝试自定义 Cookie 策略来管理 Cookie。首先,创建一个继承自 WebViewClient 的自定义 WebViewClient 类,并重写 shouldOverrideUrlLoading 方法:
WebView webView = findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
// 在请求加载之前获取当前的 Cookie
String cookie = CookieManager.getInstance().getCookie(request.getUrl().toString());
// 设置 Cookie
if (cookie != null) {
CookieManager.getInstance().setCookie(request.getUrl().toString(), cookie);
}
// 返回 false,表示继续加载
return false;
}
});
这样,WebView 在每次请求加载之前都会获取当前的 Cookie,并重新设置到 WebView 中,以避免登录 cookie 被删除。
请注意,以上方法中的部分代码需要根据你的具体情况进行调整。