Ich habe eine AngularJS-Anwendung, die ich aktualisiere, um PHP 7 zu verwenden. Derzeit habe ich eine benutzerdefinierte Session-Handler-Einrichtung für Sitzungen:
In meinem app.js
habe ich eine kontinuierliche Überprüfung, ob der Benutzer authentifiziert ist und auf die Anwendung zugreifen kann.
Im obigen Code läuft isAuthenticated
isUserAuthorized.php
Die Sitzung sollte gestartet werden, wenn session.php
benötigt wird. Es scheint jedoch, dass dies nicht geschieht. Beim Zugriff auf die Anwendung wird die Anmeldeseite angezeigt, aber isUserAuthorized.php
gibt eine Warnung aus:
Warnung: session_start (): Sitzungsdaten konnten nicht gelesen werden: Benutzer (Pfad: / var / lib / php / mod_php / session) in der Sitzung.php
Wenn ich die Login
-Schaltfläche wähle, wird login.php
aufgerufen, aber der Benutzer wird trotz falscher Zugangsdaten direkt in die Anwendung gebracht.
Ich bin mir nicht ganz sicher, was dieses seltsame Verhalten verursacht und warum die Sitzung nicht erstellt wird. Muss ich die Funktion sess_write
explizit aufrufen?
Ich habe festgestellt, dass das Entfernen von require_once 'session.php'
von login.php
das richtige Verhalten verursacht. Der Benutzer kann sich anmelden, wenn er gültige Anmeldeinformationen angibt. Die Sitzungsdaten werden jedoch immer noch nicht in die Datenbank geschrieben. Irgendeine Idee warum?
Die Probleme sind auf meinen Session-Handler zurückzuführen. Ab PHP 7 muss die Funktion sess_read
eine Zeichenfolge zurückgeben. Dies verursachte die Warnung:
Warnung: session_start (): Sitzungsdaten konnten nicht gelesen werden: Benutzer (Pfad: / var / lib / php / mod_php / session) in der Sitzung.php
Ich habe das behoben, indem ich ''
zurückgegeben habe, wenn $data
war null
.
Dies verursachte Probleme mit meiner sess_write
-Funktion, die wusste, wann und wann zu aktualisieren ist. Ich habe das durch Ändern der SQL behoben.
Letztendlich habe ich den Session-Handler zu einer Klasse gemacht, wie im Endergebnis gezeigt:
%Vor%Tags und Links javascript angularjs php session php-7