Ich verwende PHP7, um Sitzungen mit meiner bevorzugten Steuerungsmethode zu starten: URL-Pfade. Das funktionierte [so wie ich es mache], funktioniert aber nicht in PHP7. Beginnen wir mit einem ganz normalen Hello-World-Beispiel.Session_start kann Sitzung nicht lesen, wenn/action1/action2 und nicht? Action1 = & action2 = verwendet wird
<?php
session_start();
if(TRUE){
$_SESSION['test'] = 'Hello World!';
}
print_r($_SESSION);
echo "<P>".session_id();
Führen Sie es zuerst mit WAHR und dieses Baby funktioniert perfekt. Setzen Sie es auf FALSE und Sie erhalten, was Sie erwarten. Führen Sie es immer wieder und Sie erhalten das gleiche, erwartete Ergebnis. Ich kann sogar die Sitzungsdatei besuchen und sehen, dass die Variablen gespeichert wurden.
Jetzt bin ich ein Fan der Kontrolle meines Codes mit Domain-Pfaden. E. G., example.com/action1/action2. Aktion1 wird in meiner .htaccess-Datei als PHP-Datei identifiziert und mein doc_root hat einen symbolischen Link, action1 -> index.php. Bitte beachten Sie, dies funktioniert in jeder Hinsicht außer einer ... sobald Sie diese Pfade zum URI hinzufügen, hört die Sitzung auf, die Variablen zu lesen.
Können Sie mir helfen zu verstehen, warum? Ja, die offensichtliche Lösung für die Frage: "Es tut weh, wenn ich das tue, was soll ich tun?" ist "Tu das nicht." Aber wie gesagt, ich bin ein Fan. Ehrlich gesagt, sollte das funktionieren. Der einzige Cookie ist korrekt. session_id()
meldet, dass ich die gleiche Sitzungs-ID und Datei anschaue. Dieselbe Sitzungs-ID, die mit Daten gefüllt ist. Entfernen Sie die Komponente/action1/action2, und die Variablen $ _SESSION werden wieder angezeigt, genau wie wir es erwarten.
Weiß jemand, warum das passiert? Worum geht es beim Hinzufügen des Pfads, der die Sitzung deaktiviert? Warum sollte es PHP überhaupt kümmern, solange es die erwartete Session-ID hat? Ich habe sogar versucht, die Session-Datei file_get_contents()
, so dass ich session_decode()
den Inhalt konnte. Ohne den Aktionspfad kann ich die Datei lesen und verarbeiten. Mit dem Aktionspfad (Trommelwirbel bitte ...) kann ich die Datei nicht einmal lesen. Es ist, als ob irgendeine Art von Besitzänderung stattgefunden hat, aber ich habe die Datei- und Verzeichnisberechtigungen weit geöffnet. Irgendwelche Ideen?
.htaccess:
RewriteEngine On
RewriteBase/
AddHandler application/x-httpd-php70 .php
<Files action1>
SetHandler application/x-httpd-php
</Files>
EDIT: Wenn Sie das selbst testen möchten. Speichern Sie die erste Datei unter test.php
und aktualisieren Sie Ihre .htaccess-Datei wie angezeigt. Schließlich ln -s test.php action1
. Führen Sie domain.com/test.php
aus, um sich zu beweisen, dass die Sitzungen funktionieren. Führen Sie dann domain.com/action1
aus und beobachten Sie, wie die Variablen verschwinden.
Möglicherweise ist die Sitzungsdatei gesperrt, sodass Sie sie nicht öffnen können. Es müssen nicht die Berechtigungen sein. Sie können auch die Protokollierung auf die höchsten Ebenen aktivieren und prüfen, ob Sie mehr in den Protokollen erfahren können. – hakre
Ich habe 'display_errors' auf' E_ALL' gesetzt und ich habe in den '/ var/logs' Dateien gesucht. Ich bin wirklich ratlos. – JBH
Und wenn Sie die Sitzungsdatei erfolglos öffnen, sehen Sie keine Warnungen? – hakre