Je suis un programmeur PHP de profession. Donc, je n'ai aucune idée sur iOS et le codage Android.
Le scénario est qu'il y a un site Web développé en utilisant un réseau social PHP logiciel intitulé "PHPFox".
Il existe maintenant deux applications mobiles similaires qui reproduisent exactement les fonctionnalités de ce site Web. Une application mobile est sous iOS et une autre sous Android.
J'ai donc écrit un ensemble d'API RESTful dans lequel j'accepte la demande de l'application mobile, analyse la demande, passe les paramètres de la demande à la fonction qui effectue le même travail pour le site Web, récupère la réponse de cette fonction, convertit-la. au format JSON et renvoyé à l'application mobile. Pour iOS et Android app, j'utilise le même ensemble de REST API.
Lorsque l'utilisateur se connecte, l'API de connexion REST est appelée. Finalement, la fonction d'authentification PHPFox est appelée, un jeton de sécurité est généré avec d'autres données utilisateur. À chaque connexion, un jeton de sécurité différent est généré par PHPFox.Ces données sont définies dans la session.Maintenant, chaque fois que j'appelle l'une des fonctions par le biais d'un fichier d'API REST), le jeton de sécurité généré au moment de la connexion est vérifié et uniquement sur vérification réussie du jeton, la fonction PHPFox est appelée. Ce processus de vérification est effectué en interne par PHPFox, il n’est donc pas nécessaire de transmettre le jeton de sécurité explicitement ou implicitement à un appel API REST.
Jusqu'à présent, tout fonctionne parfaitement.
Mon doute commence à partir d'ici. Je ne sais pas si la session est maintenue dans l'application iOS/Android. Donc, si la session sur le serveur, c'est-à-dire que PHPFox a expiré, qu'adviendra-t-il de l'application? Est-ce que ça va planter? L'utilisateur devra-t-il se connecter à nouveau? Si l'utilisateur tue l'application sur l'appareil et revient à l'application, est-ce qu'il/elle doit refaire le processus de connexion?
Il y a trop de doutes dans mon esprit. Je suis totalement confus avec ces choses.
Quelqu'un peut-il s'il vous plaît mettre plus l'accent sur le problème que je fais face? Ce serait vraiment bien si vous pouviez expliquer en détail.
Merci.
REST est sans session pour sa nature. Vous devez générer un jeton lorsque l'utilisateur est connecté. Vous devez enregistrer ce jeton sur votre client mobile. Pour chaque demande, vous devez attacher un jeton valide dans l'en-tête de la demande et le vérifier côté serveur. Si le jeton expire, le jeton stocké sur un client n'est pas valide. Donc, vous devez vous reconnecter à cause de la réponse 401. Si le jeton n'est pas correct, vous devez répondre 400. J'espère que je vous aiderai.
Contrairement aux navigateurs Web, les applications iOS et Android ne peuvent pas gérer de sessions. En règle générale, une fois qu'un utilisateur s'est connecté (informations de connexion vérifiées à partir du serveur), ses informations de connexion sont enregistrées côté client. données du serveur utilisant la session less REST appels api. C’est ainsi que cela se fait généralement dans les applications mobiles.
Cependant, si vous voulez que la session serveur et l'application mobile aillent de pair (ce qui, à mon avis, n'est pas une bonne idée), la
1) Lorsque l'utilisateur se connecte, un jeton de sécurité est généré côté serveur et enregistré à la fois côté serveur et côté client.
2) L'application mobile pourra communiquer avec le serveur tant que le jeton de sécurité est valide.
3) À l'expiration de la session, le jeton de sécurité devient invalide. Maintenant, le serveur et le client doivent comprendre la réponse à l'expiration de la session. L'application mobile doit maintenant rediriger l'utilisateur vers la page de connexion. L'utilisateur se reconnectera puis communiquera avec le serveur. Cela devrait se produire chaque fois que la session est expirée.
Si vous utilisez Oauth 2 pour l’authentification, voici la configuration commune:
J'espère que cela t'aides.
À votre santé
Votre serveur doit être complètement sans état et aucune session ne doit donc être stockée. A REST L'API est en réalité simplement une couche d'abstraction de données avec une sécurité optionnelle (par jeton)
Ainsi, votre API expose un service d'authentification, qui répondra avec un jeton d'autorisation à utiliser lors des demandes suivantes en tant qu'en-tête. Ce jeton doit être une relation 1to1 avec chaque utilisateur et universellement unique. Il doit également avoir un délai d'expiration, moment auquel votre serveur répond avec une réponse d'erreur appropriée demandant à votre application d'actualiser le jeton, ce qui peut être effectué via un système de jeton d'actualisation distinct, ou demandant à l'utilisateur de se reconnecter pour actualiser le jeton. .
C'est l'APP qui doit conserver l'état, pas le serveur. Le serveur est simplement là pour les données, et ne doit donc pas s'appuyer sur un type d'authentification basé sur une session.
Ne vous inquiétez pas de la session du côté développement mobile. Je ne connais pas grand chose à propos de iOS, mais dans Android, nous utilisons SharedPrefrence
(indicateur qui maintient la session localement).
Une session est "quelque chose" qui vit sur le serveur. Il peut s'agir d'un objet stockant des détails sur l'utilisateur (par exemple, l'identifiant de session, le nom d'utilisateur, l'adresse électronique, etc.) ou toute autre donnée nécessaire au traitement des demandes futures (telles que les détails du panier d'achat, l'adresse de livraison, etc.).
Ce "quelque chose" est typiquement un objet, qui peut être stocké en mémoire, dans une base de données ou même sérialisé et sauvegardé dans le système de fichiers (je crois que c'est la valeur par défaut en PHP).
Alors, quand vous dites "Je ne sais pas si la session est maintenue dans l'application iOS/Android", j'ai bien peur que cela n'ait aucun sens. Seul le serveur peut gérer des sessions.
Généralement, la seule chose que le client sait (navigateur Web ou application mobile) est l'identifiant de session (sous la forme d'un jeton ou d'un GUID). C’est la seule chose dont le client/l’application doit se souvenir et qui doit être envoyé avec toute demande adressée au serveur.
Il pourrait être stocké en tant que cookie et/ou envoyé au serveur en tant qu'en-tête de requête.
Ensuite, le serveur lira l'identifiant de session/le jeton à partir des cookies ou de l'en-tête et récupérera les détails de la session à l'emplacement où il stockera les sessions (système de fichiers, mémoire ou base de données). C'est ce qui se passe derrière la scène lorsque vous appelez session_start()
.
Pour en savoir plus sur la gestion de session et sur la création d'un gestionnaire de session personnalisé (qui peut être nécessaire dans votre cas pour obtenir un jeton à partir des en-têtes de demande):
http://php.net/manual/en/function.session-start.php
Je n'ai aucune expérience de travail avec PHPFox, mais voici comment une interface mobile devrait idéalement gérer les problèmes:
Cas 1: application mobile en communication active avec le serveur:
Cas 2: application mobile active sans aucune communication avec le serveur (par exemple, appel téléphonique entrant, déplacement entre applications, etc.):
Cas 3: l'utilisateur supprime l'application sur l'appareil et la relance: