Android上的WebView和Cookies

我有一个appspot上的应用程序,通过正常的浏览器工作正常,但是当通过Android WebView使用,它不能设置和读取Cookie。 我不是试图从这个Web应用程序“外部”获取cookie,一旦WebView访问URL,所有的处理,ID等都可以停留在那里,我所需要的只是在这个应用程序中的会话pipe理。 第一个屏幕也加载好,所以我知道WebView +服务器的交互性没有被破坏。

我看了WebSettings类,没有像setEnableCookies这样的调用。

我加载这样的url:

public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView webview = new WebView(this); setContentView(webview); webview.loadUrl([MY URL]); } .. } 

有任何想法吗?

如果您使用Android棒棒糖即SDK 21,则:

 CookieManager.getInstance().setAcceptCookie(true); 

将无法工作。 你需要使用:

 CookieManager.getInstance().setAcceptThirdPartyCookies(true); 

我遇到了同样的问题,上面的线路作为一个魅力。

从Android文档 :

CookieSyncManager用于同步RAM和永久存储器之间的浏览器cookie存储。 为了获得最佳性能,浏览器cookie被保存在RAM中。 一个单独的线程在一个定时器的驱动下保存cookie。

要使用CookieSyncManager ,主应用程序必须在应用程序启动时调用以下内容:

 CookieSyncManager.createInstance(context) 

要设置同步,主机应用程序必须调用

 CookieSyncManager.getInstance().startSync() 

在Activity.onResume()和调用

  CookieSyncManager.getInstance().stopSync() 

在Activity.onPause()中。

要获得即时同步而不是等待定时器触发,主机可以调用

 CookieSyncManager.getInstance().sync() 

同步时间间隔是5分钟,所以你会想手动强制同步,例如在onPageFinished(WebView,String)中。 请注意,即使sync()也是asynchronous发生的,所以不要在活动closures的时候这样做。

最后这样的事情应该工作:

 // use cookies to remember a logged in status CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); WebView webview = new WebView(this); webview.getSettings().setJavaScriptEnabled(true); setContentView(webview); webview.loadUrl([MY URL]); 

我知道发生了什么事。

当我通过服务器端动作(一个URL访问)加载一个页面,并查看在Webview中从该动作返回的HTML时,该第一个动作/页面将在该Webview中运行。 但是,当您在Web应用程序中单击任何操作命令的链接时,这些操作将启动一个新的浏览器 。 这就是为什么cookie信息会因为您为Webview设置的第一个cookie信息消失而丢失的原因,我们在这里有一个单独的程序。

您必须拦截Webview上的点击,以便浏览从不离开应用程序,一切都保持在同一个Web视图内。

  WebView webview = new WebView(this); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); //this is controversial - see comments and other answers return true; } }); setContentView(webview); webview.loadUrl([MY URL]); 

这解决了这个问题。

我的问题是在同一个会话中“cookies”不工作。 –

布拉克:我有同样的问题。 启用cookie解决了这个问题。

 CookieManager.getInstance().setAcceptCookie(true); 

CookieManager.getInstance().setAcceptCookie(true); 通常它应该工作,如果你的webview已经初始化

或者试试这个:

 CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); cookieManager.setAcceptCookie(true);