Je travaille sur une application PhoneGap avec une utilisation de session serveur. Il a besoin de cookies pour gérer la session. De plus, le cookie de l'équilibreur de charge doit également être géré. Il n'y a donc pas moyen de contourner. Comment gérez-vous les cookies dans votre application PhoneGap?
J'ai déjà effectué quelques recherches:
- Certains disent que la gestion des cookies peut dépendre du serveur ne définissant pas de cookies pour les agents utilisateurs inconnus (IIS): Session PhoneGap (cookies) sur iOS
- En JavaScript, les cookies peuvent être définis avec document.cookie = ..., mais ils ne sont pas enregistrés dans PhoneGap et perdus. Avant de tirer les demandes xhr, cela fonctionne.
- Les cookies peuvent être récupérés après une requête xhr avec xhr.getResponseHeader ('Set-Cookie'). Mais seulement lorsqu'il est réellement défini sur le serveur. Malheureusement, jQuery supprime l'en-tête "Cookie".
- La propriété JavaScript document.cookie n'est pas attribuée et n'est pas mise à jour après les demandes (xhr).
- Certains suggèrent localStorage pour enregistrer les identifiants de session, etc. Mais tous les scripts peuvent y accéder et cela peut être un problème de sécurité XSS. Les cookies contournent ce problème en utilisant l'indicateur httponly.
- iOS: Il y a quelques modifications qui changeront le comportement de webView pour prendre en charge les cookies. Mais ils ne semblent pas fonctionner avec iOS 6 et PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Les cookies semblent être activés par défaut dans AppDelegate.m (v2.5).
Réponses:
Ami, j'ai aussi essayé sans succès d'utiliser des cookies avec phonegap. La solution était d'utiliser localStorage.
Exemple rapide clé:
Exemple rapide d'élément défini:
Obtenir un exemple rapide d'article
Exemple de suppression d'élément rapide:
Effacer l'exemple rapide:
Si vous utilisez votre javascript pour le mobile et le Web, vous pouvez utiliser ce code pour détecter cet environnement:
Références: http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html # page-toc-source
Attention: l'utilisation de la navigation anonyme sur iOS peut empêcher le stockage local de fonctionner comme prévu. Un test simple qui fonctionne bien pour moi:
la source
Comme vous, je voulais utiliser des cookies définis par un serveur dans mon application afin que mon application soit cohérente avec le Web et ne nécessite pas un ID de périphérique distinct ou une autre méthode d'authentification.
Ce que j'ai découvert est le suivant:
$.get()
ou$.post()
) ne persistent pasLa façon de faire ainsi persister un cookie est d'utiliser le plugin inAppBrowser .
Tout d'abord, configurez un serveur simple qui accepte comme paramètre GET les paramètres clé-valeur que vous souhaitez conserver. Je suis un gars python / tornade, donc mon serveur pourrait ressembler à:
Ensuite, dans votre application:
Vous pouvez alors appeler cela comme suit:
la source
Vous pouvez également ajouter l'ID de session à l'URL demandeuse et, en fonction de la langue de l'application du serveur, récupérer les données de session à l'aide de la valeur d'ID de session de la chaîne de requête que vous avez transmise - par exemple, en PHP, vous pouvez ouvrir une session existante en transmettant l'ID de session. Bien que cela ne soit pas recommandé en raison des risques de piratage de session, vous pouvez facilement tester l'adresse IP et le navigateur pour vous assurer que la session provient du même client. Cela nécessiterait bien sûr que vous expiriez votre session dès que le client ferme le navigateur de session et vous limiterait à la mise en cache des vues puisque la session serait incluse dans le html réel. Stocker des données sur l'appareil local pour moi au moins n'est pas vraiment une option car cela expose trop le client, ce qui représente à mon avis un risque de sécurité beaucoup plus grand.
la source
$.post()
dans jQuery, puis définir une variable locale. Si vous cryptez tout, c'est assez sûr.Utilisez le
device_id
pour adresser certains enregistrements côté serveur. Créer une table de base de données nomméesession
sur votre serveur avecdevice_id
,cookiename
,cookievalue
ettimestamp
sous forme de colonnes.Lorsqu'un client accède à votre serveur Web via l'application phonegap, récupérez le sien
device_id
et stockez les cookies dans votre table. Ledevice_id here
agit comme le jeton d'accès dans le protocole OAuth.Désormais, pour des raisons de sécurité, vous devez réduire la période de validité de ces enregistrements, car le device_id est permanent et votre client voudrait vendre ses téléphones un jour. Par conséquent, utilisez
timestamp
pour stocker le dernier accès par le client et supprimez l'enregistrement s'il n'a pas été consulté pendant, par exemple, 10 jours.la source
J'utilise Cordova 6.1 (la dernière version pour le moment) et j'ai trouvé ce qui suit:
Si je place le cookie via Javascript en utilisant document.cookie = ... alors cela ne fonctionne pas. Cependant si j'envoie une fonction setCookie via Ajax au serveur avec une fonction comme
et définissez le cookie côté serveur en utilisant
alors ça marche vraiment!
J'espère que cela t'aides. À votre santé
la source
J'ai eu le même problème et j'ai décidé de déplacer evrth vers localStorage.J'ai écrit un plugin pour que vous puissiez l'utiliser également: angular-cookies-mirror
la source
bien sûr vous pouvez.
l'application ionique envoie simplement un requset ajax, les cookies fonctionnent bien ou ne dépendent pas du serveur.
je travaille avec le serveur python Django et le serveur de nœuds, les deux cookies fonctionnaient très bien
code de nœud ci-dessous
reste api
code d'application ionique
vous pouvez vérifier mon code source ici
la source
Je pense que la question est fondamentalement de définir des cookies côté client pour une application cordova. La plupart des informations sur ce sujet impliquent que la configuration des cookies côté client ne fonctionne pas pour cordova.
Mais j'ai trouvé un plugin qui me permet de définir des cookies côté client pour mon application cordova.
Découvrez https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Cela fonctionne juste!
la source
J'ai également eu des problèmes de cookies de session avec les demandes Cordova + XHR. Les cookies sont perdus à chaque redémarrage de l'application. Deux choses ont résolu mes problèmes:
Les cookies doivent avoir une date d'expiration.
Toutes les demandes XHR doivent avoir l' indicateur withCredentials défini sur true.
la source