Android WebView Cookie问题

我有一台服务器向我的android应用程序发送一个会话cookie以用于认证通信。 我试图加载一个指向同一服务器的URL的WebView,我试图通过会话cookie进行身份验证。 我注意到它间歇性地工作,但我不知道为什么。 我使用相同的会话cookie在我的服务器上进行其他调用,并且这些调用永远不会失败。 在试图在WebView中加载URL时,我只会观察到这个问题,并且不会每次都发生。 非常令人沮丧。

下面是我用来做这件事的代码。 任何帮助将不胜感激。

String myUrl = ""http://mydomain.com/"; 
CookieSyncManager.createInstance(this); 
CookieManager cookieManager = CookieManager.getInstance(); 
Cookie sessionCookie =  getCookie(); 
if(sessionCookie != null){ 
    String cookieString = sessionCookie.getName() +"="+sessionCookie.getValue()+"; domain="+sessionCookie.getDomain(); 
    cookieManager.setCookie(myUrl, cookieString); 
    CookieSyncManager.getInstance().sync(); 
} 

WebView webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setBuiltInZoomControls(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setWebViewClient(new MyWebViewClient()); 
webView.loadUrl(myUrl);

感谢justingrammens ! 这对我有用,我设法在我的DefaultHttpClient请求和WebView活动中共享cookie:

//------- Native request activity
private DefaultHttpClient httpClient;
public static Cookie cookie = null;

//After Login
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
    cookie = cookies.get(i);
}

//------- Web Browser activity
Cookie sessionCookie = myapp.cookie;
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
    cookieManager.removeSessionCookie();
    String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
    cookieManager.setCookie(myapp.domain, cookieString);
    CookieSyncManager.getInstance().sync();
}   

解决方案:Webview CookieSyncManager

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

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

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

解决方案是给Android足够的时间来处理cookie。 你可以在这里找到更多的信息:http://code.walletapp.net/post/46414301269/passing-cookie-to-webview

链接地址: http://www.djcxy.com/p/22287.html

上一篇: Android WebView Cookie Problem

下一篇: How do I set/unset a cookie with jQuery?