6

私はこれを理解しようとして髪を引っ張ってきました:私はHttpsURLConnectionを作成し、java.net.cookiemanagerを使用してCookieを管理しています(私が理解しているように、android.webkit.cookiemanagerをHttpUrlConnection/HttpsUrlConnectionに使用する方法はありませんか? )。長年の Cookie を後の接続に保存する必要があります。

悲しいことに、私はhttp://loopj.com/android-async-http/を使用できません。信頼できない証明書を許可する必要があるため、PersistentCookieStore です ( http://abhinavasblog.blogspot.se/2011/07/allow-untrustedを使用) -certificate-for-https.html )。PersistentCookieStore を単独で使用してみましたが、Apache Cookie を使用しており、Java.net Cookie を使用しています...

これは私が試したことです:

cManager = new CookieManager(null, CookiePolicy.ACCEPT_ALL);

private void setSharedPreferences(){
    List<HttpCookie> cookies = cManager.getCookieStore().getCookies();

    if (cookies.isEmpty()) {
        Log.d(tag,"no cookies received");
    } else {
        for (int i = 0; i < cookies.size(); i++) {
            if(cookies.get(i).getName().equals("rememberMe")) {
                editor.putString(
                        "rememberMe", cookies.get(i).toString());
                editor.commit();
            }
        }
    }
}

そして、次のアプリの起動時に Cookie を取得しているとき:

SharedPreferences sharedPreferences = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
String rememberString = sharedPreferences.getString("rememberMe", "none");

if (!rememberString.equals("none")) {
    Log.d("rememberME är inte", "none!");
    URI uriToCookie = null;
    try {
        uriToCookie = new URI("https://myservername.com");
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    List<HttpCookie> cookieList = HttpCookie.parse(rememberString);
    cManager.getCookieStore().add(uriToCookie, cookieList.get(0));
}

Cookie は cManager に追加されますが、サーバーによって認識されません。何らかの解析上の問題があると思います。誰かが解決策を得ましたか?

4

2 に答える 2

0

私はこの部分を使用しました:

        cookies = ((AbstractHttpClient) httpClient).getCookieStore().getCookies();
        Log.v("Cookie:", cookies.toString());
        if (cookies.isEmpty()) {
        } else {
               for (int i = 0; i < cookies.size(); i++) {
                      if(cookies.get(i).getName().contentEquals("PHPSESSID")) {
                         PHPSESSID = cookies.get(i).getValue();
                      }
                   }
        }

contentEquals を使用してドメイン名を取得し、それを urs と一致させて保存します。ああ、私はPHPSESSIDを文字列として使用し、後で共有設定にダンプしました

于 2013-05-28T07:19:43.667 に答える
0

あなたのコードを見た後、私は間違っているコードを書いていますが、あなたは単にクッキー全体を保存していません:

for (int i = 0; i < cookies.size(); i++) {
           if(cookies.get(i).getName().equals("rememberMe")){
               editor.putString("rememberMe", cookies.get(i).toString());
               editor.commit();
           }
       }

CookieのList長さをcookies.size()ループして取得し、すべての Cookie を取得しますが、別のキーに追加または保存する代わりに、保存キー値「rememberMe」をコミットします。つまり、基本的には、保存したものを何度も上書きしているだけです。

于 2013-05-28T06:28:38.157 に答える