[英]android URLConnection and cookies
登錄后,我一直在努力保持會話狀態,我想知道是否有人可以提供幫助。 我本來想嘗試Apache,但是android 文檔指出它們已經從Apache移開,轉而使用Java的URLConnection。
如果我將cookie數據作為捆綁包額外存儲,如何獲取這些數據並將其重新添加到CookieManager中?
將cookie數據存儲到字符串中,然后使用bundle extras將其傳遞給我的下一個活動,這是一種不好的形式嗎?
我是否必須在每個活動中創建一個CookieManager並基本上在每個請求之后將其存儲,重新分配,然后發出下一個請求?
//Login.java:私有CookieManager loginCookie = new CookieManager(); extras.putString(“ Cookies”,loginCookie.toString());
//LoggedIn.java: Bundle bundle = intent.getExtras(); String strCookies = bundle.getString("Cookies"); SummaryCookies = (CookieManager)strCookies; //I tried casting the strCookies back to a CookieManager, but that did not work. :(
如何從strCookies中獲取Cookie,並將其轉換回CookieManager可以理解的格式?
1 + 2)我認為這不是使用Cookie的好方法,因為當您停止應用程序時,此Cookie也將被刪除。 您應該將它們保存到持久性存儲中,並在以后使用。
3)您必須實現自己的CookieStore,然后創建一個CookieManager,並使用CookieHandler.setDefault(...)設置其默認值。 這適用於整個系統,因此您不應該為每個活動都創建它。
4)如果您仍然想使用您的方法。 您可以通過getHeaderFields()方法從響應標頭中獲取Cookie,並查詢“ Set-Cookie”和“ Set-Cookie2”標頭。 構建類似於“ Set-Cookie:Your-string-cookie-here”的標頭字符串,然后使用HttpCookie.parse(headerString)獲取列表HttpCookie對象。
這是創建持久性Cookie存儲的示例。 如果需要,這里是完整的源代碼: https : //github.com/nguyentrungduy/Customize-CookieStore
@Override
public void add(URI uri, HttpCookie cookie) {
// TODO Auto-generated method stub
synchronized (this) {
URI uri2 = createURI(uri);
List<HttpCookie> cookies = mCookies.get(uri2);
if (cookies == null) {
cookies = new ArrayList<HttpCookie>();
mCookies.put(uri2, cookies);
} else {
cookies.remove(cookie);
}
cookies.add(cookie);
// Save into SharePreferenced
saveToPersistent(uri2, cookies);
}
}
@Override
public List<HttpCookie> get(URI uri) {
// TODO Auto-generated method stub
synchronized (this) {
List<HttpCookie> httpCookies = new ArrayList<HttpCookie>();
List<HttpCookie> values = mCookies.get(uri);
if (values != null) {
for (HttpCookie httpCookie : values) {
if (!httpCookie.hasExpired()) {
httpCookies.add(httpCookie);
}
}
}
Set<Entry<URI, List<HttpCookie>>> set = mCookies.entrySet();
for (Entry<URI, List<HttpCookie>> entry : set) {
if (uri.equals(entry.getKey())) {
continue;
}
List<HttpCookie> cookies = entry.getValue();
Iterator<HttpCookie> iterator = cookies.iterator();
while (iterator.hasNext()) {
HttpCookie cookie = iterator.next();
String domain = cookie.getDomain();
if (!domainMatches(domain, uri.getHost())) {
continue;
}
if (cookie.hasExpired()) {
iterator.remove();
} else if (!httpCookies.contains(cookie)) {
httpCookies.add(cookie);
}
}
}
return Collections.unmodifiableList(httpCookies);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.