2012-10-03 13 views
5

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

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

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

そして、私はを:これは私が試したものです...

を私は一人で自分のPersistentCookieStoreを使用してみましたが、彼らはapacheのクッキーを使用していると私はjava.netのクッキーを使用しています次のアプリの起動時にクッキーを取得:

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

クッキーがCMANAGERに追加されますが、サーバーによって認識されていません..私は、構文解析の問題のいくつかの並べ替えがあると考えています。誰でも解決策を手に入れましたか?

答えて

0

あなたのコードを見た後、私は間違っているコードがありますが、単純に全体のクッキーを保存していない:あなたはcookies.size()とループとクッキーのList長さを取得し、すべてのクッキーを取得

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

いますが、コミット別のキーに追加または格納する代わりに、保存キー値 "rememberMe"を使用します。だから基本的に、あなたは何度も何度も何度も上書きしているだけです。

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

ちょうどドメイン名を取得し、それがURSと一致し、それを格納できるようにcontentEqualsを使用しています。ああ、私は後で私のsharedprefsにダンプした文字列としてPHPSESSIDを使用しました

関連する問題