Comment puis-je enregistrer des cookies lors de l'utilisation de HTTPUrlConnection?
J'ai commencé à utiliser le recommandé HTTPUrlConnection
et déplacé loin de la DefaultHTTPClient
. L'une des choses que je n'ai pas été en mesure de les coller ensemble est l'emploi d'un cookie persistant magasin. Je voudrais simplement attacher un cookie personnalisé gestionnaire/gestionnaire de ma connexion pour stocker les cookies. La Android la documentation n'a pas été très utile, car elle enveloppe le sujet sur les cookies en deux lignes.
J'ai été en utilisant LoopJ de PersistentCookieStore
plus tôt et qui a fonctionné à merveille.
Aucune idée sur comment je pourrais définir un cookie persistant store Android, et que je peux joindre à ma HTTPUrlConnection
qui enregistre et récupère automatiquement les cookies?
Grâce
Vous devez vous connecter pour publier un commentaire.
Son' m'a pris quelques heures, mais j'ai réussi à construire un cookie personnalisé de stockage de moi-même.
Vous devez joindre en faisant ceci:
Voici le stockage réelle:
SharedPreferences
sur chaque suppression, ajout ou mise à jour. De cette façon, lorsque l'application est tué et puis il est redémarré, la banque de cookies juste créé sera le même que le précédent, l'application a été tué.if (!mapCookies.containsKey(entry.getKey())) {
passe unString
tandis que lemapCookies
peut contenir que desURI
's que les clés.J'ai utilisé la réponse ci-dessus, mais il a changé ma méthode add pour les opérations suivantes pour gérer plus d'un cookie à partir de la même URI (ce cookie magasin avec GAE a été le traitement le jeton de session et le n'oubliez pas de jeton de deux témoins de la même URI pour une certaine raison):
Et d'accéder et de créer un combiné cookie:
Attacher à la connexion:
Il y a quelques problèmes de base dans de nombreux personnalisé CookieStore mise en œuvre.
Le premier problème est HttpCookie la sérialisation en chaîne - HttpCookie.la méthode toString() n'est pas acceptable pour ce parce que son résultat n'est pas adapté pour HttpCookie.parse(String header) de la méthode.
Le deuxième problème: la plupart des CookieStore mise en œuvre (par exemple ici https://codereview.stackexchange.com/questions/61494/persistent-cookie-support-using-volley-and-httpurlconnection) ne prend pas en compte le format de HttpCookie.maxAge champ. C'est un nombre de secondes à cookie live. Mais si vous persistez sa valeur et après un certain temps unpersist, il sera mauvais. Vous devez convertir maxAge champ dans quelque chose comme "expire_at" et persister au lieu de maxAge.
La caisse de la mise en œuvre dans le lien ci-dessous. Il enregistre les cookies par le nom d'hôte comme l'original java.net.InMemoryCookieStore la mise en œuvre.
D'ailleurs qu'il contient un SerializableHttpCookie pour être en mesure de sérialiser l'complet HashMap dans les SharedPreferences.
https://gist.github.com/jacobtabak/78e226673d5a6a4c4367