webentwicklung-frage-antwort-db.com.de

Sitzungsdaten unter PHP7.1 konnten nicht gelesen werden

Teilen eines Problems, das ich hatte (und jetzt gelöst).

Auf meinem Entwicklungscomputer führe ich IIS mit PHP aus. Ich habe ein Upgrade auf PHP7 durchgeführt und plötzlich funktionierte mein Code nicht mehr. Dieser Fehler wurde zurückgegeben ...

session_start (): Sitzungsdaten konnten nicht gelesen werden: Benutzer (Pfad: C:\WINDOWS\temp)

Es sieht aus wie eine Berechtigungsfrage, richtig? Also habe ich lange Zeit die php.ini-Einstellungen angepasst und versucht, die Ordnerberechtigungen zu ändern - ohne Erfolg.

Dann wurde mir etwas klar. Siehe meine Antwort unten.

4
xtempore

Ich stellte schließlich fest, dass die Nachricht bedeutungslos war - die Anwendung implementiert einen eigenen Session-Handler unter Verwendung der Datenbank. In der read -Methode erhalte ich die Sitzungsdaten als Zeichenfolge aus der Datenbank.

class Sess implements SessionHandlerInterface
...
    public function read($key)
    {
        $qKey = U_Data::quote($key);
        $dt = U_Data::datetime();
        $sql = <<<EOT
SELECT `sess_data` FROM `sess`
WHERE `sess_key` = $qKey 
AND `sess_exp_ts` > $dt
ORDER BY `sess_exp_ts` DESC
LIMIT 1
EOT;
        return U_Data::getOneVal($sql);
    }

Die Methode U_Data :: getOneVal hat einen zweiten Parameter, der zurückgegeben werden soll, wenn keine übereinstimmenden Daten vorhanden sind. Der Standardwert ist null und hat in PHP5 gut funktioniert, aber in PHP7.1 wird der Fehler verursacht. Eine einfache Änderung, bei der eine leere Zeichenfolge zurückgegeben wird, löste das Problem.

        return U_Data::getOneVal($sql, '');

Also da ist es. Wenn Sie eine Warnung erhalten, dass session_start nicht funktioniert UND Sie einen eigenen Session-Handler implementieren, sollten Sie Ihren Code in der Methode read überprüfen, um sicherzustellen, dass er immer eine Zeichenfolge zurückgibt.

(Hinweis: U_Data ist nur meine eigene Daten-Utility-Klasse.)

Ich hoffe, das erspart jemandem die Stunden, die ich damit verbracht habe, mir den Kopf zu zerbrechen!

30
xtempore

War selbst derselbe Fehler. Nach viel Googeln und Fluchen stellte sich heraus, dass es sich in meinem Fall tatsächlich um ein Berechtigungsproblem handelte, allerdings in meinem htdocs-Stammordner und nicht in dem in der Fehlerausgabe angegebenen Pfad. Die Stammordnerberechtigungen waren 700, während alles andere 755 war (ich habe eine Joomla-Installation, die 755 für Ordnerberechtigungen vorschreibt). Durch die Korrektur der Stammordnerberechtigungen wurde das Problem endgültig freigegeben.

1
John Rix