1

サーバーからの Cookie があり、この Cookie を共有設定に保存します。Ion ライブラリからサーバーにリクエストを送信すると、アプリにログインしていて、Ion がこの Cookie を持っているため、正しく処理されます。アプリを閉じて再度開くと、Ion は私の Cookie を持っています。問題は、アプリを破棄したときに、Ion にこの Cookie がなくなったことです。サーバーにクエリをリクエストすると、新しい 1 つの Cookie が返され、Ion はこの新しい Cookie を取得します。そのため、古い Cookie を Ion ライブラリに確立する必要があります。

ヘッダーに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();

しかし、これはどれも行っていません。誰かが私を助けることができますか?

4

1 に答える 1

0

これは古い質問ですが、自分のためだけに公開すると思いました。

これは見た目ほど難しいことではありませんが、ドキュメントがなければ、テスト ケースを調べて理解する必要があります。使用したコードをヘルパー クラスにラップしました。あなたがそれでできることは間違いなくありますが(有効期限の設定など)、これはポスターの要件を満たすのに十分なはずです:

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);
    }

}

要旨としても

于 2014-11-13T17:49:12.093 に答える