it-swarm.com.de

Wie verwalte ich eine Sitzung für einen Benutzer, der über eine mobile App in PHP angemeldet ist?

Ich bin ein PHP-Programmierer von Beruf. Ich habe also keine Ahnung von iOS und Android Codierung.

Das Szenario ist, dass es eine Website gibt, die mit Hilfe einer Social Networking PHP Software mit dem Titel "PHPFox" entwickelt wurde.

Jetzt gibt es zwei ähnliche mobile Apps, die genau die Funktionalität dieser Website nachbilden. Eine mobile App ist in iOS und eine andere in Android.

Daher habe ich eine Reihe von RESTful-APIs geschrieben, in denen ich die Anforderung von der mobilen App akzeptiere, die Anforderung analysiere, die Anforderungsparameter an die Funktion weitergebe, die den gleichen Job für die Website ausführt, die Antwort von dieser Funktion erhalte und sie konvertiere in das JSON-Format und schickte es zurück an die mobile App. Für iOS und Android App verwende ich den gleichen Satz von REST API-Dateien.

Wenn sich der Benutzer anmeldet, wird die REST API für die Anmeldung aufgerufen. Schließlich wird die PHPFox-Funktion für die Authentifizierung aufgerufen, ein Sicherheitstoken wird zusammen mit einigen anderen Benutzerdaten generiert. Bei jeder Anmeldung wird das andere Sicherheitstoken generiert Wird von PHPFox generiert. Diese Daten werden in der Sitzung festgelegt. Jedes Mal, wenn ich eine der Funktionen über eine beliebige REST API-Datei aufrufe, wird das zum Zeitpunkt der Anmeldung generierte Sicherheitstoken überprüft und erst nach Bei erfolgreicher Tokenüberprüfung wird die PHPFox-Funktion aufgerufen.Dieser Überprüfungsprozess wird intern von PHPFox durchgeführt, sodass das Sicherheitstoken weder explizit noch implizit an einen REST API-Aufruf übergeben werden muss.

Bis jetzt funktioniert alles einwandfrei.

Mein Zweifel beginnt hier. Ich weiß nicht, ob die Sitzung in der iOS/Android-App verwaltet wird. Wenn die Sitzung auf dem Server, d. H. PHPFox, abgelaufen ist, was passiert dann mit der App? Wird es abstürzen? Muss sich der Benutzer erneut anmelden? Wenn der Benutzer die App auf dem Gerät beendet und erneut auf die App zugreift, muss er den Anmeldevorgang erneut durchführen?

Ich habe zu viele Zweifel. Ich bin total verwirrt mit diesen Dingen.

Kann jemand bitte das Problem, mit dem ich konfrontiert bin, genauer untersuchen? Es wäre wirklich großartig, wenn Sie dies im Detail erläutern könnten.

Vielen Dank.

41
PHPLover

REST ist von Natur aus ohne Sitzung. Sie müssen ein Token generieren, wenn der Benutzer angemeldet ist. Sie müssen dieses Token auf Ihrem mobilen Client speichern. Für jede Anforderung müssen Sie ein gültiges Token im Anforderungsheader anhängen und es auf der Serverseite überprüfen. Wenn das Token abläuft, ist das auf einem Client gespeicherte Token ungültig. Sie müssen sich also wegen der 401-Antwort erneut anmelden. Wenn das Token nicht korrekt ist, müssen Sie 400 beantworten. Ich hoffe, dass ich für Sie hilfreich bin.

54
valeriocomo

Im Gegensatz zu Webbrowsern können iOS- und Android-Apps keine Sitzungen verwalten. Sobald sich ein Benutzer angemeldet hat (Anmeldeinformationen vom Server überprüft), werden seine Anmeldeinformationen normalerweise clientseitig gespeichert. Dann ruft die App Daten vom Server ab, indem sie sitzungslose REST API-Aufrufe verwendet. So wird es meistens in mobilen Anwendungen gemacht.

Wenn Sie jedoch möchten, dass die Serversitzung und die mobile App Hand in Hand gehen (was meiner Meinung nach keine gute Idee ist), ist dies der richtige Weg

1) Wenn sich der Benutzer anmeldet, wird auf der Serverseite ein Sicherheitstoken generiert und sowohl auf der Server- als auch auf der Clientseite gespeichert.

2) Die mobile App kann mit dem Server kommunizieren, solange das Sicherheitstoken gültig ist.

3) Wenn die Sitzung abläuft, wird das Sicherheitstoken ungültig. Nun muss zwischen Server und Client ein Verständnis für die Antwort bestehen, wenn die Sitzung abgelaufen ist. Jetzt muss die mobile App den Benutzer erneut zur Anmeldeseite umleiten. Der Benutzer wird sich erneut anmelden und dann mit dem Server kommunizieren. Dies sollte jedes Mal geschehen, wenn die Sitzung abgelaufen ist.

20
Fawad Masud

Wenn Sie Oauth 2 für die Authentifizierung verwenden, ist hier das allgemeine Setup:

  • Der Benutzer meldet sich in der mobilen App an
  • Wenn die Anmeldeinformationen in Ordnung sind, gibt der Server das Zugriffstoken, ein Aktualisierungstoken und die Lebensdauer des Tokens zurück
  • Die mobile App speichert diese Werte + aktuellen Zeitstempel
  • Auf der Serverseite ist ein Garbage Collector so konfiguriert, dass abgelaufene Token gelöscht werden
  • Bevor Sie einen API-Anruf tätigen, überprüft die mobile App anhand der gespeicherten Werte, ob der Token in Kürze abläuft. Wenn das Token in Kürze abläuft, sendet die App das Aktualisierungstoken, das den Server anweist, ein neues Zugriffstoken zu generieren
  • Wenn Sie möchten, dass Benutzer in Verbindung bleiben, kann die App so konfiguriert werden, dass das Zugriffstoken regelmäßig überprüft und ein neues angefordert wird, wenn es veraltet ist

Hoffe das hilft.

Prost

15
Valéry

Ihr Server sollte vollständig statusfrei sein, und daher sollte keine Sitzung gespeichert werden. Eine REST API ist praktisch nur eine Datenabstraktionsschicht mit optionaler Sicherheit (durch Token).

Damit Sie einen Authentifizierungsdienst zur Verfügung stellen, der mit einem Autorisierungstoken antwortet, das für nachfolgende Anforderungen als Header verwendet wird, sollte dieses Token eine 1-zu-1-Beziehung zu jedem Benutzer und universell eindeutig sein. Es sollte auch eine Ablaufzeit haben. Zu diesem Zeitpunkt antwortet Ihr Server mit einer entsprechenden Fehlerantwort und fordert Ihre App auf, das Token zu aktualisieren. Dies kann entweder über ein separates Aktualisierungs-Token-System erfolgen oder der Benutzer muss sich erneut anmelden, um das Token zu aktualisieren .

Es ist die APP, die den Status beibehalten soll, nicht der Server. Der Server dient lediglich zu Datenzwecken und sollte daher nicht auf sitzungsbasierte Authentifizierung angewiesen sein.

8
RaggaMuffin-420

Sie sollten sich keine Gedanken über die Sitzung von der Seite der mobilen Entwicklung machen. Ich weiß nicht viel über iOS, aber in Android verwenden wir SharedPrefrence (Flag, das die Sitzung lokal verwaltet).

4
Puneet Ahuja

Eine Sitzung ist "etwas", das auf dem Server lebt. Es kann sich um ein Objekt handeln, in dem Details zum Benutzer (z. B. Sitzungs-ID, Benutzername, E-Mail-Adresse usw.) oder andere Daten gespeichert sind, die für die Verarbeitung zukünftiger Anforderungen erforderlich sind (z. B. Angaben zum Warenkorb, Lieferadresse usw.).

Dieses "Etwas" ist normalerweise ein Objekt, das im Speicher, in einer Datenbank oder sogar serialisiert und im Dateisystem gespeichert werden kann (ich glaube, dies ist die Standardeinstellung in PHP).

Wenn Sie also "Ich weiß nicht, ob die Sitzung in der iOS/Android-App verwaltet wird" sagen, hat dies leider keinen Sinn. Nur der Server kann Sitzungen verwalten.

Normalerweise kennt der Client nur die Sitzungs-ID (in Form eines Tokens oder einer GUID) (Webbrowser oder mobile App). Dies ist das einzige, woran sich der Client/die App erinnern muss, und es muss zusammen mit jeder Anfrage an den Server gesendet werden.

Es kann als Cookie gespeichert und/oder als Anforderungsheader an den Server gesendet werden.

Anschließend liest der Server die Sitzungs-ID/das Token aus den Cookies oder dem Header und ruft die Sitzungsdetails von dem Ort ab, an dem die Sitzungen gespeichert sind (Dateisystem, Speicher oder Datenbank). Das passiert hinter den Kulissen, wenn Sie session_start() aufrufen.

Weitere Informationen zur Sitzungsbehandlung und zum Erstellen eines benutzerdefinierten Sitzungshandlers (der in Ihrem Fall möglicherweise erforderlich ist, um ein Token aus den Anforderungsheadern abzurufen):
http://php.net/manual/en/function.session-start.php

3
Alex Sanséau

Ich habe noch keine Erfahrung mit PHPFox, aber so sollte ein mobiles Frontend die Probleme im Idealfall lösen:

Fall 1: Mobile App, die aktiv mit dem Server spricht:

  • Der Sitzungs-Timeout-Stempel springt immer wieder hoch und die Sitzung bleibt am Leben.

Fall 2: Mobile App ohne Serverkommunikation aktiv (z. B. eingehender Telefonanruf, Wechsel zwischen Apps usw.):

  • Die Serversitzung kann ein Timeout haben oder nicht.
  • Wenn das Zeitlimit überschritten wird, schlägt die nächste Abfrage an den Server fehl und gibt einen Fehler zurück.
  • Die App verwendet diesen Fehler und leitet den Anmeldebildschirm mit einer Toastnachricht weiter, in der der Benutzer aufgefordert wird, sich anzumelden. (Dies geschieht in meiner Banking-App)

Fall 3: Benutzer beendet die App auf dem Gerät und startet sie neu:

  • Die App sollte das Token entweder in sqllite oder in gemeinsam genutzten Einstellungen speichern. (Immer angemeldete Apps gehen so vor)
  • Nach dem Neustart kann die App den Server mit dem vorhandenen Token abfragen.
  • Wenn die Sitzung aktiv ist, wird die Kommunikation fortgesetzt und der Benutzer kann fortfahren. Wenn nicht, wechselt der Benutzer zum Anmeldebildschirm wie in Fall 2.
3
Sanand Sule