2012-10-03 2 views
5

Я тянул свои волосы, пытаясь понять это: я делаю HttpsURLConnection и используя java.net.cookiemanager для управления своими файлами cookie (нет возможности использовать android.webkit.cookiemanager для HttpUrlConnection/HttpsUrlConnection, как я понял?). Мне нужно сохранить старый файл cookie для последующих подключений.Магазин cookie в общих предисловиях

К сожалению, я не могу использовать http://loopj.com/android-async-http/, и это PersistentCookieStore, потому что мне нужно разрешить ненадежный сертификат (используя http://abhinavasblog.blogspot.se/2011/07/allow-untrusted-certificate-for-https.html). Я попытался с помощью их PersistentCookieStore в одиночку, но они используют Apache печенье, и я использую Java.net печенье ...

Это то, что я пробовал:

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

И когда я получение куки на следующем запуске приложения:

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

Посмотрев на свой код, я код неправильно, но вы просто не хранить все куки:

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

Вы получаете List длину печенье с cookies.size() и петлей и получить все куки, но Вы обязуетесь сохранить ключ-значение «помнитьMe» вместо добавления или сохранения в отдельных ключах. Таким образом, вы просто переписываете то, что вы храните много раз.

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, чтобы получить доменное имя, и пусть она совпадает с УРС и хранить его. О, и я использовал PHPSESSID как строку, которую я сбросил в своих общих версиях для более поздних версий.

Смежные вопросы