Android App löscht Session automatisch bei onDestroy?
Ich habe eine App, wo man sich anmelden muss.
Die SessionID wird in der Login Activity empfangen und gespeichert. Wenn ich auf einer anderen Activity bin, hole ich die SessionID aus den ShaPref und hänge sie an den Header. Dann erhalte ich einen Response. Alles funktioniert einwandfrei.
Aber sobald ich die App schließe und den Login überspringe, dann wird ja die SessionID wieder aus den ShaPref geholt und an den Header gehängt.
Die SessionID ist weiterhin vorhanden! Dies prüfe ich anhand des Toast und Logs.
Aber ich erhalte den Response, dass ich ausgeloggt sei. Und die Session ist komplett leer.
Meine Vermutung ist:
Das die SessionID nur der Ort ist, wo die Datei mit den Werten gespeichert ist. Also das ich die SessionID an den Header hänge und dann weiß die Seite, welche Datei benutzt werden soll. Aber wenn man aus der App herausgeht, löscht Android automatisch diese Datei. Doch die SessionID-Adresse bleibt bestehen.
Fragen:
- Wie kann ich die App schließen, ohne dass Android die Datei löscht?
- Wo wird die Session auf dem Handy gespeichert? Ich kann es ja am PC einsehen.
- Wie kann ich verhindern, dass Androids onDestroy etc. die Datei löscht?
Und wie kann ich dafür sorgen, dass Android bei onDestroy etc. die Datei löscht?
Wenn ich angemeldet sein möchte und ich herausgehe und wieder rein, bleibt die SessionID. Aber auf der Webseite ist sie leer. Aber wenn ich nicht angemeldet sein möchte, dann wird die ShaPref gelöscht und dann soll auch die Datei gelöscht werden.
Ich hoffe, ihr habt eine Lösung, wie man die automatische Löschung von dieser Datei bei Verlassen der App verhindert.
Ich danke euch im Voraus.
1 Antwort
Ich verstehe dein Problem noch nicht ganz.
Du hast eine App mit Login. Nach einem erfolgreichen Login bekommst/generierst du eine SessionID, welche du über SharedPreferences abspeicherst.
Der Login läuft vermutlich über ein Server. Die erhaltenen SessionID schickst du dann im HTTP Header mit, damit du die Daten und z.B. kein 403/Forbidden zurückbekommst.
Willst du jetzt bei onDestroy, dass die SessionID automatisch gelöscht wird oder soll diese auch für den zweiten Start gespeichert bleiben?
Wenn du die ID nicht dauerhaft speichern möchtest, dürfte SharedPreferences die falsche Umsetzung sein. Du solltest die ID dann über ein anderen Weg über die Laufzeit speichern, die Variable beim Beenden automatisch geleert wird.
Wenn die ID dauerhaft gespeichert bleiben soll, ist SharedPreferences eine gute Möglichkeit. Die ID sollte auch noch beim nächsten Start vorhanden sein. Ob die ID beim Server noch ihren Job macht, ist die nächste Frage.
Wenn die SessionID beim nächsten Start ungültig ist, solltest du nachschauen, wie der Login bei der Webseite/Server genau funktioniert. Es könnte sein, dass die SessionID an ein anderen Faktor gekoppelt ist, welcher sich beim Neustart der Anwendung ändert. Wenn der eneute Start länger her ist, könnte die Session auch zeitlich abgelaufen sein.
Eine andere Möglichkeit den Login zu speichern, wäre das Sichern der Login Daten wie z.B. Nutzername und Passport. Beim Starten der App könntest du automatisch den Login Prozess durchführen.
Eine bessere Umsetzung wäre, wenn du z.B. ein JsonWebToken (JWT) nutzen könntest. Der JWT beinhaltet direkt den Nutzername mit einer Signatur. Der Server muss also nicht eine Session mit der lokalen DB abgleichen. Den JWT gibt man auch im Header mit. Wenn der Server es unterstützt oder du es selber im Server integrieren kannst, solltest du diesen Weg nehmen.
Wenn ich aus der App rausgehe, wird ja onDestroy aufgerufen. Leider löscht er die Session Datei. Und wenn ich rein möchte, ist die Session Datei weg, aber Die SessionID ist in den ShaPref noch drinnen. Ich verlasse die App max. 10 sec.
Wenn ich angemeldet sein möchte, dann soll nixs gelöscht werden, auch wenn ich die App komplett schließe(onDestroy).
Es soll nur gelöscht gelöscht werden, wenn ich nicht angemeldet sein möchte.
Aber Die App löscht immer die Datei...
Wo wird die Session Inhalt gespeichert auf dem Handy und wie verhindere ich die Löschung? Den Die SessionID in den Shapref bleibt bestehen...
Und in der Sesion weird nur Kundennummer, Email, eingeloggtbleibencode,...
Hättest du eine Idee, wiso nur bei onDestroy es gelöscht wird??