Comment gérer la session d'un utilisateur connecté à partir de l'application mobile en PHP?
Je suis un programmeur PHP par la profession. Donc, je n'ai pas la moindre idée sur iOS et Android codage.
Le scénario est, il y est un site web développé à l'aide d'un Réseau Social logiciel PHP intitulé "PHPFox".
Il y a maintenant deux applications mobiles qui exactement reproduit les fonctionnalités de ce site. Une application mobile est en iOS et un autre est en Android.
Donc, j'ai écrit une série d'Api RESTful où je suis l'acceptation de la requête à partir de l'application mobile, analyser la demande, transmettre la requête de paramètres à la fonction qui fait le même travail pour le site web, obtenir une réponse à partir de cette fonction, de le convertir en format JSON et l'a renvoyé à l'application mobile. Pour iOS et Android, je suis en utilisant le même ensemble d'API REST fichiers.
Lorsque l'utilisateur se connecte, le RESTE de l'API de connexion est appelé. Finalement, le PHPFox fonction pour l'authentification est appelée, un jeton de sécurité est généré ainsi que quelques autres données de l'utilisateur. Avec chaque connexion les différents jeton de sécurité est généré par PHPFox. Ces données sont reprises dans la session. Maintenant, chaque fois que j'appelle de l'une des fonctions par le biais de tout REPOS fichier API de l'émission de jeton de sécurité généré au moment de la connexion est vérifiée et seulement au moment de la vérification de jeton de la PHPFox fonction est appelée. Ce processus de vérification est effectué en interne par PHPFox. Donc pas besoin de passer le jeton de sécurité explicitement ou implicitement de tout REPOS appel d'API.
Jusqu'à maintenant, tout fonctionne très bien.
Mon doute commence à partir d'ici. Je ne sais pas si la séance est maintenue dans iOS/Android app. Donc, si la session sur le serveur c'est à dire PHPFox obtient expiré alors ce qui va se passer à l'application? Sera-ce crash? Permettra à l'utilisateur d'avoir à vous connecter à nouveau? Si l'utilisateur tue l'application sur le périphérique et vient de nouveau à l'application, a-t-il à faire le processus de connexion à nouveau?
Il y a trop de doutes dans mon esprit. Je reçois totalement confondu avec ces choses.
Quelqu'un peut s'il vous plaît mettre davantage l'accent sur la question que je me pose? Ce serait vraiment génial si vous pouviez expliquer en détail.
Grâce.
- donc, finalement, comment êtes-vous de maintien des sessions, veuillez répondre je suis bloqué dans ce même problème ??
Vous devez vous connecter pour publier un commentaire.
RESTE est sessionless pour sa nature. Vous avez besoin de générer un jeton lorsque l'utilisateur connecté. Vous devez enregistrer ce jeton sur votre mobile client.
Pour chaque demande, vous devez joindre un jeton valide en-tête de la demande et vérifier à côté serveur.
Si l'expiration de ce jeton, le jeton stockées sur un client n'est pas valide. Ainsi, vous devez vous connecter à nouveau en raison de réponse 401. Si le jeton c'est pas correct, vous devez responde 400.
J'espère que je suis utile pour vous.
Contrairement aux navigateurs web, les applications iOS et android ne permettent pas de maintenir les sessions. Généralement, une fois qu'un utilisateur s'est connecté (connexion les informations d'identification vérifiées à partir du serveur), ses identifiants de connexion sont enregistrés sur le côté client. L'application récupère les données à partir du serveur à l'aide de session RESTE moins d'appels d'api. C'est de cette façon la plupart du temps c'est fait dans des applications mobiles.
Cependant, si vous souhaitez que le serveur de session et application mobile vont main dans la main (que je n'ai pas pense que c'est une bonne idée), la voie est
1) Lorsque l'utilisateur se connecte, un jeton de sécurité est généré sur le serveur et enregistrées sur le serveur et côté client.
2) L'application mobile sera en mesure de communiquer avec le serveur tant que le jeton de sécurité est valide.
3) Lors de la session expire, le jeton de sécurité devient non valide. Maintenant, il doit y avoir une entente entre le serveur et le client à propos de la réponse lors de la session a expiré. Maintenant l'application mobile doit rediriger l'utilisateur vers la page de connexion à nouveau. L'utilisateur se connecte à nouveau, puis communiquer avec le serveur. Cela devrait se produire chaque fois que la session a expiré.
Si vous êtes en utilisant Oauth 2 pour athentication, ici, c'est la commune de l'installation:
Espère que cette aide.
Acclamations
Votre serveur devrait être complètement apatrides, et donc pas de session doivent être stockés.. une API REST est effectivement juste une couche d'abstraction de données avec l'option de sécurité (par jeton)
Si vous API exposer un service d'authentification, qui répondra avec un jeton d'Autorisation pour être utilisé sur les demandes ultérieures comme en-tête, ce jeton doit être un 1to1 relation avec l'utilisateur, et Universellement Unique. Il doit également avoir une date d'expiration, à quel point votre serveur répond avec d'erreur approprié de la réponse de la demande de votre app pour actualiser le jeton, qui peut être fait soit par le biais d'une actualisation système de jetons, ou de demander à l'utilisateur se connecte à nouveau à actualiser le jeton.
C'est l'APPLICATION qui doit maintenir l'état, et non sur le serveur. Le serveur est seulement là pour les données de fins, et il ne faut pas compter sur n'importe quel type de session en fonction de l'authentification.
Vous ne devriez pas vous soucier de la session du développement mobile côté.Je ne sais pas beaucoup sur iOS, mais sur Android, nous utilisons
SharedPrefrence
(Drapeau qui maintient la session localement).Je n'ai pas d'expérience de travail avec PHPFox, mais c'est la façon dont un mobile frontend, idéalement, devrait gérer les problèmes:
Cas 1: l'application Mobile activement parler au serveur:
Cas 2: application Mobile active sans aucune communication du serveur (par exemple, des appels téléphoniques entrants, se déplaçant entre les apps, etc.):
(Ce qui se passe dans mon application bancaire)
Cas 3: l'Utilisateur tue l'application sur le périphérique et relance c':
continuer. Si non, l'utilisateur passe à l'écran de connexion comme dans le Cas 2.
Une session est "quelque chose" qui vit sur le serveur. Il peut être un objet à l'enregistrement des détails sur l'utilisateur (par exemple l'id de session, le nom d'utilisateur, adresse email,...) ou d'autres données qui seront nécessaires pour traiter les demandes futures (comme panier détails, adresse de livraison...).
Que "quelque chose" est en général un objet, qui peut être stocké dans la mémoire, dans une base de données ou même sérialisé et enregistré dans le système de fichiers (je crois que c'est la valeur par défaut en PHP).
Donc quand vous dites "je ne sais pas si la séance est maintenue dans iOS/Android app", je crains que ne fait pas sens. Seul le serveur peut maintenir les sessions.
Généralement, la seule chose que le client sait (navigateur web ou application mobile) est l'id de session (dans la forme d'un jeton ou le GUID). C'est la seule chose que le client/application ne faut pas oublier, et elle doit être envoyée à côté d'une requête au serveur.
Il pourrait être stockée dans un cookie et/ou envoyés au serveur en tant qu'en-tête de requête.
Le serveur va lire l'id de session/jeton à partir de ces cookies ou d'en-tête et permettra de récupérer la session détails de l'endroit où il stocke les sessions (système de fichiers, la mémoire ou de la base de données). Qu'est ce qui se passe derrière la scène lorsque vous appelez
session_start()
.Pour en savoir plus sur le gestionnaire de session et comment créer le gestionnaire de session personnalisé (ce qui pourrait être nécessaire dans votre cas pour obtenir un jeton de les en-têtes de requête):
http://php.net/manual/en/function.session-start.php