2015-04-18 3 views
0

Я изо всех сил пытаюсь сохранить сеанс после входа в систему, и мне было интересно, может ли кто-нибудь помочь. Я собирался попробовать Apache, но андроид documentation заявляет, что они ушли от Apache в пользу URLConnection Java.android URLConnection и cookies

  1. Если я данные куки хранятся в виде пучка дополнительного, как я могу считать, что данные и добавить его обратно в CookieManager?

  2. Неправильная форма для хранения данных cookie в строке, а затем передать в мое следующее упражнение, используя дополнительные функции?

  3. Должен ли я создавать CookieManager в каждом действии и в основном хранить его после каждого запроса, переназначить его, а затем выдать следующий следующий запрос ?

    //Login.java: private CookieManager loginCookie = new CookieManager(); extras.putString ("Cookies", loginCookie.toString());

    //LoggedIn.java: 
    Bundle bundle = intent.getExtras(); 
    String strCookies = bundle.getString("Cookies"); 
    SummaryCookies = (CookieManager)strCookies; //I tried casting the strCookies back to a CookieManager, but that did not work. :(
    

Как я могу получить печенье из strCookies и преобразовать его обратно в формат, который CookieManager понимает?

ответ

1

1 + 2) Я не думаю, что это хороший способ работать с Cookie, потому что когда вы остановите приложение, этот файл cookie также будет удален. Вы должны сохранить их в постоянное хранилище и использовать их позже.

3) Вы должны реализовать свой собственный CookieStore, а затем создать CookieManager и установить его по умолчанию с CookieHandler.setDefault (...). Это относится ко всей системе, поэтому вы не должны создавать ее для каждого вида деятельности.

4) Если вы все еще хотите использовать свой метод. Вы можете получить Cookie из заголовка ответа методом getHeaderFields() и запросить заголовок «Set-Cookie» и «Set-Cookie2». Создайте свой заголовок String как «Set-Cookie: Your-string-cookie-here» и используйте HttpCookie.parse (headerString), чтобы получить ваш объект HttpCookie.

Это пример создания хранилища постоянных файлов cookie. Вот полный источник, если вам нужно: https://github.com/nguyentrungduy/Customize-CookieStore

@Override 
public void add(URI uri, HttpCookie cookie) { 
    // TODO Auto-generated method stub 
    synchronized (this) { 
     URI uri2 = createURI(uri); 
     List<HttpCookie> cookies = mCookies.get(uri2); 
     if (cookies == null) { 
      cookies = new ArrayList<HttpCookie>(); 
      mCookies.put(uri2, cookies); 
     } else { 
      cookies.remove(cookie); 
     } 
     cookies.add(cookie); 
     // Save into SharePreferenced 
     saveToPersistent(uri2, cookies); 
    } 
} 

@Override 
public List<HttpCookie> get(URI uri) { 
    // TODO Auto-generated method stub 
    synchronized (this) { 
     List<HttpCookie> httpCookies = new ArrayList<HttpCookie>(); 
     List<HttpCookie> values = mCookies.get(uri); 
     if (values != null) { 
      for (HttpCookie httpCookie : values) { 
       if (!httpCookie.hasExpired()) { 
        httpCookies.add(httpCookie); 
       } 
      } 
     } 

     Set<Entry<URI, List<HttpCookie>>> set = mCookies.entrySet(); 
     for (Entry<URI, List<HttpCookie>> entry : set) { 
      if (uri.equals(entry.getKey())) { 
       continue; 
      } 
      List<HttpCookie> cookies = entry.getValue(); 
      Iterator<HttpCookie> iterator = cookies.iterator(); 
      while (iterator.hasNext()) { 
       HttpCookie cookie = iterator.next(); 
       String domain = cookie.getDomain(); 
       if (!domainMatches(domain, uri.getHost())) { 
        continue; 
       } 
       if (cookie.hasExpired()) { 
        iterator.remove(); 
       } else if (!httpCookies.contains(cookie)) { 
        httpCookies.add(cookie); 
       } 
      } 
     } 
     return Collections.unmodifiableList(httpCookies); 
    } 
} 
Смежные вопросы