Je développe une application en utilisant android 2.1.les cookies de session fonctionnent sur l'émulateur, mais pas sur le vrai périphérique
J'ai un problème avec l'utilisation de cookies de session pour me connecter à un service Web RESTful. Le code fonctionne bien sur l'émulateur, mais lorsque je l'exécute sur mon HTC Magic, la logique des cookies ne fonctionne pas. J'ai confirmé que la magie reçoit des cookies dans les en-têtes en les listant (voir ci-joint). Quelqu'un peut-il dire pourquoi le magasin de cookies serait vide même s'ils sont dans les en-têtes?
public HttpProvider() {
Scheme http = new Scheme("http", new PlainSocketFactory(), 80);
SchemeRegistry registry = new SchemeRegistry();
registry.register(http);
client = new DefaultHttpClient(new ThreadSafeClientConnManager((new BasicHttpParams()), registry), new BasicHttpParams());
}
public void get(Request request) {
try {
HttpGet get = new HttpGet(request.url);
HttpResponse response = client.execute(get);
debugListHeaders(response, request.ticket);
debugListCookies();
}
}
void debugListHeaders(HttpResponse response, int ticket) {
Header[] headers = response.getAllHeaders();
Log.d(LOG, "Printing all headers" + " (" + ticket + ")");
for (Header header : headers) {
Log.d(LOG, "Header name: " + header.getName() + ", value: " + header.getValue() + " (" + ticket + ")");
}
Log.d(LOG, "All headers have been printed" + " (" + ticket + ")");
}
void debugListCookies() {
Log.d(LOG, "List cookies for connection");
for (Cookie cookie : client.getCookieStore().getCookies()) {
Log.d(LOG,
"Domain: " + cookie.getDomain() +
" Name: " + cookie.getName() +
" Path: " + cookie.getPath() +
" Value: " + cookie.getValue() +
" Expires: " + cookie.getExpiryDate().toString() +
" IsExpired: " + (cookie.isExpired(new Date()) ? "true" : "false"));
}
Log.d(LOG, "All cookies have been listed");
}
Thru the emulator:
<snipped header list as it's obviously working>
D/SessionProvider( 257): List cookies for connection
D/SessionProvider( 257): Domain:<snip> Name: S Path:/Value: 75XGSMR3BLLGYM0J Expires: Tue Oct 12 20:24:09 America/Barbados 2010
IsExpired: false
D/SessionProvider( 257): Domain: <snip> Name: lang Path:/Value: en Expires: Tue Oct 12 20:24:09 America/Barbados 2010 IsExpired: false
D/SessionProvider( 257): All cookies have been listed
Thru HTC Magic:
D/HttpProvider( 983): Printing all headers (-192275970)
D/HttpProvider( 983): Header name: Date, value: Thu, 14 Oct 2010 22:44:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Server, value: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0 (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: S=S41GM85A675Z8YQU; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: U=nibor.yarrum%40gmail.com; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: lang=en; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Vary, value: Accept-Encoding (-192275970)
D/HttpProvider( 983): Header name: Keep-Alive, value: timeout=15, max=100 (-192275970)
D/HttpProvider( 983): Header name: Connection, value: Keep-Alive (-192275970)
D/HttpProvider( 983): Header name: Transfer-Encoding, value: chunked (-192275970)
D/HttpProvider( 983): Header name: Content-Type, value: text/html (-192275970)
D/HttpProvider( 983): All headers have been printed (-192275970)
I/HttpProvider( 983): Request completed (-192275970)
D/SessionProvider( 983): List cookies for connection
D/SessionProvider( 983): All cookies have been listed
Mise à jour - J'ai essayé cela sur deux téléphones et ils fonctionnent bien tous les deux. Un téléphone ne gère pas les cookies. Soupir. – mvsjes2