2013-02-21 42 views
0

可我做了一个Android应用程序与最低要求的API 8. 的用户都在我的后端有一个cookie身份验证。这适用于每个具有api级别9或更高级别的设备。 cookie将被保存CookieManager:饼干在Android 2.2是没有的WebView

CookieManager cManager = CookieManager.getInstance(); 
CookieSyncManager.createInstance(LauncherApplication.getAppContext()); 
cManager.setAcceptCookie(true); 
cManager.setCookie(".xxxxxxxx.xx", "MobileGuid=" + guid); 
CookieSyncManager.getInstance().sync(); 

我检查,如果这个cookie可用也与CookieManager:

public static boolean hasCookie(){ 
    CookieManager cManager = CookieManager.getInstance(); 
    String cookieString = cManager.getCookie(".xxxxxxx.xx"); 
    if(cookieString != null && cookieString.contains("MobileGuid")){ 
     return true; 
    } 
    return false; 
} 

这将返回总是如此,但Cookie只是可供选择的WebView如果在Android版本高于2.2。 (我的phpinfo检查这一点)

我的WebView配置是这样的:

String databasePath = LauncherApplication.getAppContext().getApplicationContext().getDir("database", 
      Context.MODE_PRIVATE).getPath(); 

    WebSettings mainWebSettings = mainWebView.getSettings(); 
    mainWebSettings.setJavaScriptEnabled(true); 
    mainWebSettings.setAppCacheEnabled(true); 
    mainWebSettings.setDatabaseEnabled(true); 
    mainWebSettings.setDomStorageEnabled(true); 
    mainWebSettings.setDatabasePath(databasePath); 

回答

1

当你调用cManager.setCookie(),试图通过

cManager.setCookie("a.xxxxxxxx.xx", "MobileGuid=" + guid + "; domain=xxxxxxx.xx"); 

所以我增加了一个“ a”到第一个参数(字面字符‘a’),并加入"domain=xxxxxxx.xx"到cookie本身。

您作为编写的代码似乎是正确的,我曾与API 9台设备不发送Cookie时API 14设备做了一个类似的斗争。恐怕我不知道它为什么起作用,但它是唯一帮助我的东西。

0

像Hylianpuffball的答案的想法是下面添加您的域名字符。我认为CookieManager正在寻找类似.domain.com和亲切子的是为了获得域名。

只需添加一个点或任何字符,它将工作