簡體   English   中英

android URLConnection和cookie

[英]android URLConnection and cookies

登錄后,我一直在努力保持會話狀態,我想知道是否有人可以提供幫助。 我本來想嘗試Apache,但是android 文檔指出它們已經從Apache移開,轉而使用Java的URLConnection。

  1. 如果我將cookie數據作為捆綁包額外存儲,如何獲取這些數據並將其重新添加到CookieManager中?

  2. 將cookie數據存儲到字符串中,然后使用bundle extras將其傳遞給我的下一個活動,這是一種不好的形式嗎?

  3. 我是否必須在每個活動中創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM