95 votes

Gestion des cookies dans PhoneGap / Cordova

Je suis en train de travailler sur une application avec PhoneGap session sur le serveur d'utilisation. Il a besoin des cookies pour gérer la session. En outre, le témoin de l'équilibreur de charge doivent être manipulés, trop. Donc, il n'y a pas moyen de contourner. Comment gérer les Cookies dans votre app PhoneGap?

J'ai déjà fait quelques recherches:

  • Certains disent que la gestion des cookies pourrait dépendre sur le serveur de ne pas mettre les cookies pour les inconnus, les agents utilisateurs (IIS): PhoneGap session (cookies) sur iOS
  • En JavaScript, les cookies peuvent être définies avec le document.cookie = ..., mais ils ne sont pas enregistrés dans PhoneGap et perdu. Avant le déclenchement de demandes xhr il fonctionne.
  • Les Cookies peuvent être récupérées après la demande xhr avec xhr.getResponseHeader ("Set-Cookie"). Mais seulement lorsqu'ils sont effectivement mis sur le serveur. Malheureusement, jQuery bandes le "Cookie" en-tête.
  • Le JavaScript document.témoin de la propriété n'est pas affecté et pas mis à jour après l' (xhr)des demandes.
  • Certains suggèrent que le localStorage pour économiser de l'id de session etc. Mais tous les scripts peuvent y accéder, et ce pourrait être XSS problème de sécurité. Les Cookies de contourner ce problème en utilisant le drapeau httponly.
  • iOS: Il y a quelques modifications qui vont changer la webView comportement à prendre en charge les cookies. Mais ils semblent ne pas fonctionner avec iOS 6 et PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
  • Les Cookies semblent être activé par défaut dans le AppDelegate.m (v2.5).

69voto

Tiago Gouvêa Points 498

Ami, j'ai essayé sans trop de succès pour l'utilisation de cookies avec phonegap. La solution a été d'utiliser localStorage. http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage

Clé Rapide Exemple:

 var keyName = window.localStorage.key(0);

Elément Exemple Rapide:

 window.localStorage.setItem("key", "value");

Obtenez De L'Élément De Exemple Rapide

 var value = window.localStorage.getItem("key");
 // value is now equal to "value"

Supprimer L'Élément Exemple Rapide:

 window.localStorage.removeItem("key");

Clair, Rapide Exemple:

 window.localStorage.clear();

Si vous vous utiliser javascript pour mobile et web, vous pouvez utiliser ce code pour détecter que de l'environnement:

var wl = window.location.href;
var mob = (wl.indexOf("android")>0);

4voto

Utiliser l' device_id à l'adresse de certains dossiers sur le côté serveur. Créer une table de base de données nommée session sur votre serveur avec device_id, cookiename, cookievalue et timestamp sous forme de colonnes.

Lorsqu'un client accède à votre serveur web via phonegap application, obtenir sa device_id et de stocker des cookies sur votre table. L' device_id here des actes que le jeton d'accès dans le protocole d'authentification OAuth.

Maintenant, pour des raisons de sécurité, vous devez réduire la période de validité de ces documents, parce que le device_id est permanente et votre client veulent vendre leurs téléphones un jour. Par conséquent, utilisez timestamp pour stocker le dernier accès par le client, et supprimer l'enregistrement si elle n'a pas été consulté pour, disons 10 jours.

3voto

moderncode Points 39

Vous pouvez également ajouter l'id de session à la demande de l'url et en fonction sur le serveur de l'application de la langue, de récupérer les données de session à l'aide de la chaîne de valeur d'id de session que vous avez passé - exemple en PHP, vous pouvez ouvrir une session existante en passant l'id de session. Alors que ce n'est pas recommandé en raison des risques de détournement de session, vous pouvez facilement tester l'adresse IP et le Navigateur assurez-vous que la session est à venir à partir du même client. Ce serait, bien sûr, vous l'expiration de votre session dès que le client ferme la session du navigateur et serait la limite à partir de la mise en cache de pages vues depuis la session serait inclus dans le html. Stockage des données sur le périphérique local, pour moi au moins, n'est pas vraiment une option, car elle expose trop à la clientèle qui est à mon avis un bien plus grand risque pour la sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X