【问题标题】:How I can establish a saved cookie in Ion library when the app is destroyed?当应用程序被销毁时,如何在 Ion 库中建立保存的 cookie?
【发布时间】:2014-03-12 11:26:56
【问题描述】:

我有一个来自服务器的 cookie,我将此 cookie 保存在共享首选项中。当我从 Ion 库向服务器发送请求时,它会正常运行,因为我已登录应用程序并且 Ion 有这个 cookie。当我关闭应用程序并重新打开时,Ion 有我的 cookie。问题是当我销毁应用程序时,Ion 不再有这个 cookie。当我向服务器请求查询时,它会给我一个新的 cookie,而 Ion 有这个新的 cookie。所以,我需要为 Ion 库建立旧的 cookie。

我尝试在标题中设置 cookie:

String cookieString = ApiConstants.API_COOKIE_NAME + "=" + cookie;
headers.add(new BasicNameValuePair("Cookie", cookieString));

if (headers != null) {
    for (int i = 0; i < headers.size(); i++) {
        b = b.addHeader(headers.get(i).getName(), headers.get(i).getValue());
    }
}

我已经尝试将此 cookie 添加到 CookieManager:

CookieManager cookieManager = CookieManager.getInstance();
CookieSyncManager.createInstance(context);

cookieManager.setAcceptCookie(true);
cookieManager.setCookie(ApiConstants.BASIC_ROOT_URL, cookieString);
CookieSyncManager.getInstance().sync();

但是,这些尝试都没有成功,有人可以帮助我吗?

【问题讨论】:

    标签: android cookies android-ion


    【解决方案1】:

    这是一个古老的问题,但我想如果只是为了我自己,我会发布它。

    这并不像看起来那么难,但是如果没有文档,您必须查看测试用例才能弄清楚。我已经使用了我使用过的代码并将其包装在一个辅助类中。你肯定可以用它做更多的事情(设置过期和什么不),但这应该足以满足发帖者的要求:

    package com.example;
    
    
    import android.content.Context;
    
    import com.koushikdutta.async.http.Headers;
    import com.koushikdutta.ion.Ion;
    
    import java.io.IOException;
    import java.net.CookieManager;
    import java.net.URI;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.List;
    
    /*
    This is adapted from my own code... so I'm not sure this will work exactly like this but it'll give you a starting point
    */
    public class IonCookieManager {
        CookieManager manager;
    
        public IonCookieManager(Context context) {
            Ion ion = Ion.getDefault(context);
            manager = ion.getCookieMiddleware().getCookieManager();
        }
    
        public void storeCookies(URLConnection conn) throws IOException {
    
            List<String> cookies = conn.getHeaderFields().get("Set-Cookie");
            URI uri = URI.create(conn.getURL().toString());
            if(cookies != null) {
                storeCookies(uri, cookies);
            }
        }
    
        public void storeCookies(URI uri, List<String> cookies) throws IOException {
            Headers headers = new Headers();
            headers.addAll("Set-Cookie", cookies);
    
            manager.put(uri, headers.getMultiMap());
        }
    
        public void storeCookie(URI uri, String cookieName, String cookieValue) throws IOException {
            List<String> cookie = new ArrayList<String>();
            cookie.add(String.format("%s=%s", cookieName, cookieValue));
            storeCookies(uri, cookie);
        }
    
    }
    

    Also as a gist.

    【讨论】:

    • 非常感谢先生,您能解释一下如何使用这个技巧吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2022-11-13
    相关资源
    最近更新 更多