Jak zarządzać sesjami z aplikacją Android

Mam aplikację na Androida, w której wysyłam post Multipart do serwletu. Ale muszę ograniczyć połączenia do raz na 5 minut. Dzięki formularzowi internetowemu mogę korzystać z plików cookie. W przypadku aplikacji na Androida nie działa w ten sposób. Jak mogę to zrobić?

 Abhishek Nandi16 lis 2012, 10:36
Możesz również użyć CookieManager w Androidzie.

questionAnswers(2)

SharedPreferences, dużo łatwiejszy iAccountManager
QuestionSolution

możesz zastosować następujące podejście (zakładając, że używasz HttpClient do komunikacji):

Za każdym razem, gdy serwer rozpoczyna nową sesję, wysyła jedną nazwę cookieSet-Cookie z wartością zawierającą jessionid, który może być użyty jako identyfikator sesji z serwerem. Tak więc w swoim kodzie za każdym razem, gdy wykonujesz połączenie sieciowe z serwerem, sprawdź, czy ten plik cookie znajduje się w odpowiedzi. Jeśli ten plik cookie jest obecny, sprawdź, czy ma on również jessionid. Poniższy kod może być użyty do sprawdzenia i przeanalizowania jessionida z nagłówka Set-Cookie.

HttpResponse response = httpClient.execute(get);

switch (response.getStatusLine().getStatusCode()) {
            case 200:
                          parseSessionID(response);
                          //process the response
                         break; 
}

private void parseSessionID(HttpResponse response) {
    try {

        Header header = response.getFirstHeader("Set-Cookie");

        String value = header.getValue();
        if (value.contains("JSESSIONID")) {
            int index = value.indexOf("JSESSIONID=");

            int endIndex = value.indexOf(";", index);

            String sessionID = value.substring(
                    index + "JSESSIONID=".length(), endIndex);

            Logger.d(this, "id " + sessionID);

            if (sessionID != null) {
                classStaticVariable= sessionID;
            }

        }
    } catch (Exception e) {
    }

}

Zapisz analizowany identyfikator w miejscu, w którym można uzyskać do niego dostęp później. Zwykle tworzę pole statyczne u mojego menedżera sieci i sklepu jessionid w tym polu.

Teraz, gdy tworzysz żądanie sieciowe, ustaw plik cookie wymagany dla jessionid w następujący sposób:

private void setDefaultHeaders(HttpUriRequest httpRequest, Request request) {

        if (classStaticVariable!= null) {
            httpRequest.setHeader("Cookie", "JSESSIONID=" + classStaticVariable);
        }

    }

wywołaj tę metodę przed wywołaniem metody HttpClient execute ..

Uwaga: przetestowałem go tylko na serwerze opartym na Javie.

yourAnswerToTheQuestion