web-dev-qa-db-fra.com

Android: Comment stocker les cookies?

Dans mon application Android, chaque activité est remplie avec les données d'un fichier XML qui se trouve quelque part sur le Web. Le site Web qui fournit ces fichiers a un mécanisme de connexion, qui fonctionne avec les cookies.

Je sais comment envoyer une requête HTTP à la page de connexion et recevoir un cookie. Ce que je ne sais pas, c'est comment je peux le stocker pour le réutiliser dans les deux autres activités ET lorsque l'application sera lancée la prochaine fois. Le cookie est valide pour un an. L'utilisateur de mon application doit donc se connecter une fois, puis jamais plus, pour une année complète.

Comment je fais ça? J'ai beaucoup cherché sur Google, mais j'ai utilisé de mauvais mots clés ou il n'y a pas de solution simple sur Internet. J'espère que quelqu'un ici peut m'aider.

Cordialement et merci d'avance, Jan Oliver

26
janoliver

Il semble qu'Android utilise l'implémentation par défaut de la mémoire, vous devez donc créer votre propre magasin de cookies persistants.

Ce didacticiel Java décrit la création de votre propre magasin persistant en tirant parti de l’implémentation par défaut http://download.Oracle.com/javase/tutorial/networking/cookies/custom.html } _

L'exemple a deux tâches à effectuer pour le stockage (lecture/écriture). Pour le stockage, je voudrais simplement utiliser SharedPreferences pour stocker uniquement le cookie de session dont vous avez besoin et ne pas en conserver d'autres.

L'exemple utilise un point d'arrêt qui n'est pas ce que vous voulez dans Android. Au lieu de run () et du hook, je voudrais juste avoir une nouvelle méthode publique persist () qui enregistre ce que vous voulez, bien que cela nécessite que vous persistiez () le magasin à la main.

Étant donné que vous ne possédez qu'un ou deux cookies importants, vous pouvez les enregistrer dans la (...)

10
cistearns

Utilisez un CookieSyncManager pour stocker votre valeur de cookie. Il peut persister après le démarrage de l'application.

Attention de ne pas utiliser CookieSyncManager dans WebViewClient # shouldInterceptRequest sur KitKat. Il sera dans l'impasse .

MODIFIER

CookieSyncManager est obsolète dans l'API 21:

Cette classe était obsolète dans l'API de niveau 21. La WebView maintenant synchronise automatiquement les cookies si nécessaire. Vous n'avez plus besoin de créer ou utilisez le CookieSyncManager. Pour forcer manuellement une synchronisation, vous pouvez utiliser le fichier Méthode CookieManager flush () qui est un remplacement synchrone de sync () .

18
Heath Borders

LoopJ a un magasin de cookies persistant intégré qui peut être utilisé avec ou sans le framework loopj

https://github.com/loopj/Android-async-http/blob/master/library/src/main/Java/com/loopj/Android/http/PersistentCookieStore.Java

4
jptsetung

Après avoir effectué votre appel http, vous pouvez récupérer les cookies comme ceci

List<Cookie> cookies = httpclient.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().contentEquals("PHPSESSID")) {
         PHPSESSID = cookies.get(i).getValue();
      }
   }
}

Pour les renvoyer:

nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
httppost.setEntity(new UrlEncodedFormEntity(aList));

aList est tout votre nomValuePairs 

4
Jim

J'ai écrit une classe simple nommée CookieHelper et j'ai fourni un exemple d'utilisation de cette classe pour aider tous les utilisateurs confrontés au même problème: https://github.com/augustopicciani/HttpClient-save-cookies -fichier

0
Augusto Picciani