2013-02-21 101 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和親切子的是爲了獲得域名。

只需添加一個點或任何字符,它將工作