Gå til innhold

[android] [apache] Cookies blir ikke sendt.


Anbefalte innlegg

Hei.

 

Jeg holder på med en mobil-app hvor jeg prøver å holde kommunikasjon mellom en server og klient. Dette skjer ved at serveren er en RESTfull server, slik at jeg kan gjøre forspørsler mot resursene. For å forenkle kommunikasjonen har jeg valgt å gjøre dette over HTTP-protokollen.

 

For å kunne skille mellom ulike brukere har jeg valgt for å gå for en autentisering, sammen med cookies. Selvfølgelig ikke helt sikkert, da cookies alltid kan sniffes. Men akkurat det er ikke så farlig, er ikke snakk om noe sensitiv informasjon.

 

Anyway, problemer er kort at cookiene jeg setter på klienten aldri blir sendt. Serverne min kjører nå et test-scripts som bare skriver ut hele requesten med alle headers på skjermen - og jeg ser ingen av cookiene mine. Lurte derfor på om noen av dere kunne hjelpe med med å finne ut hvorfor, og forklare hva jeg gjør feil.

 

Jeg har først laget 2 hjelpe-metoder, i hovedsak for å unngå duplisering av kode, disse ser slik ut:

 

// Gets a standard client - set to HTTP1.1
private HttpClient getClient() {
 HttpParams params = new BasicHttpParams();
 params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
 return new DefaultHttpClient(params);
}

// Gets the context with cookies to be used. This is to make each user unique
private HttpContext getHttpContext(String server) {
 CookieStore cookieStore = new BasicCookieStore();
 BasicClientCookie cookie = new BasicClientCookie("X-ANDROID-USER", "some name");
 cookie.setDomain(server);
 cookie.setPath("/");
 cookie.setVersion(1);

 cookieStore.addCookie(cookie);
 HttpContext localContext = new BasicHttpContext();
 localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
 return localContext;
}

 

Denne brukes så i hovedmetoden som gjør en GET-request mot en bestemt server, på en bestemt URI.

// Connects to the restfull server and returns the return value (get request)
private String restfullRead(URI uri, String server)
{
 // Sets up the different objects needed to read a HttpRequest
 HttpClient client = this.getClient();
 HttpGet request = new HttpGet();
 request.setURI(uri);
 HttpContext context = this.getHttpContext(server);

 // Connects to the server and reads response
 try {
  HttpResponse response = client.execute(request, context);
  reader.close();
}
 catch (Exception e) {
  return "";
 }

 

Når jeg så kjører metoden mot serveren min, så ender jeg opp med en request som ser slik ut:

GET /info/1 HTTP/1.1

Host: 192.168.0.191:8080

Connection: Keep-Alive

 

Her er det altså ingen cookie informasjon, som serveren min kan bruke. Noen forslag på hvorfor?

Endret av etse
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...