在WebView android中设置Cookies

fli*_*r83 14 cookies android

我正在尝试设置一些cookie WebView来打开一个浏览器,其浏览器与我在我的应用程序上的会话相同.

我读了很多答案,但它们对我不起作用.我发现的唯一解决方案是loadUrl对cookie数据进行硬编码extraHeaders,但正如预期的那样,这仅适用于此请求,并且不会维护会话.

我的代码是:

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.setCookie("http://xx.xxx.example.com","mid="+MySession.GetSession().sessionId+" ; Domain=.example.com");
cookieSyncManager.sync();

String cookie = cookieManager.getCookie("http://xx.xxx.example.com");

Log.d(LOGTAG, "cookie ------>"+cookie);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new TuWebViewClient());
mWebView.loadUrl("http://xx.xx.example.com");
Run Code Online (Sandbox Code Playgroud)

getCookie()返回正确的数据,但是当我从服务器读取cookie时,这些是空的.怎么了?请指教.谢谢!!!

fli*_*r83 7

解决了!!!!问题是webView,我不知道发生了什么,但如果我创建了

WebView webView = new WebView(Activity.this);
Run Code Online (Sandbox Code Playgroud)

有用.如果我从活动中读取webview findViewById()它不起作用.

此外,如果您需要设置以前从网站收到的cookie列表.您所要做的就是使用a for-loop来完成并设置所有这些.它帮助我解决了这个问题


小智 5

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
...
cookieSyncManager.sync();
Run Code Online (Sandbox Code Playgroud)

是问题的原因.你应该这样做:

CookieSyncManager.createInstance(mWebView.getContext());
...
CookieSyncManager.getInstance().sync();
Run Code Online (Sandbox Code Playgroud)

并且不需要手动创建WebView ...