2009-06-16 5 views
3

Ich habe mich immer gefragt, ob der Inhalt des $ _SESSION-Arrays noch verfügbar ist, wenn eine PHP-Sitzung während der Ausführung eines Skripts abläuft, bis die Ausführung des Skripts beendet ist. Zum Beispiel:

session_start(); 

if(! isset($_SESSION['name'])) { 
    echo 'Name is not set'; 
    exit; 
} 

// imagine there is a bunch of code here and that the session times out while 
// this code is being executed 

echo 'Name is ', $_SESSION['name']; // will this line throw an error? 

ist es praktisch, Session-Variablen auf dem lokalen Bereich zu kopieren, damit ich sie später im Skript lesen kann, ohne zu überprüfen für eine Sitzung Auszeit halten zu müssen? Etwas wie:

Antwort

7

mach dir keine Sorgen über solche Dinge. Der Sitzung wird nichts passieren. Es ist initialisiert von sessioni_start() und $_SESSION wird immer in Ihrem Skript verfügbar sein.

+0

noch mehr die Standard-Flatfile-Implementierung verhindert die Sitzung, die angefordert wird, Zeitlimit, da die Datei geöffnet (und gesperrt), bevor die GC möglicherweise ausgeführt wird. Es ist also möglich, dass Sie eine sehr alte Sitzungsdatei laden, selbst wenn die GC durch Ihren Aufruf von session_start() ausgelöst wurde. – VolkerK

0

Was Sie verstehen mussten, ist wie Sitzungen funktionieren. Ein Client, der auf ein Skript mit einem globalen Superuser $ _SESSION zugreift, kennt nur den Schlüssel der Sitzung, die ihm gehört (Gespeichert in Cookie/URL). Dies bedeutet, dass die Sitzungsdaten selbst nichts mit dem Client zu tun haben. Wenn Sie den Schlüssel für die Sitzungsdaten haben, die Sie verwenden möchten, können Sie sie verwenden. Ältere Versionen von PHP hatten einige Sicherheitslücken, weil Sitzungen leicht zugänglich waren (ich erinnere mich nicht an Details).

Wenn Sie die Sitzungs-ID in einem PHP-Skript haben, haben Sie Zugriff auf diese Sitzung, es sei denn, der Speicher auf dem Computer wird gelöscht/Festplatte ist beschädigt (Computer Neustart/Gerätefehler).

Hoffe das hilft, sonst gehen Sie zu php.net und tauchen Sie in die Details ein, wie Sitzungen funktionieren.

2

Die standardmäßige dreistündige Sitzungsdauer wird jedes Mal zurückgesetzt, wenn Sie die Sitzung öffnen (siehe session_cache_expire). Daher kann eine Sitzung während einer Anfrage nur dann zeitüberwacht werden, wenn eine Anfrage drei Stunden dauert. Standardmäßig fordert PHP eine Zeitüberschreitung nach nur 30 Sekunden an. Es besteht also keine Gefahr, dass die Sitzung während einer Anfrage abläuft. Außerdem ändert sich die $_SESSION Variable nicht plötzlich in der Mitte einer Anfrage. Es ist gefüllt, wenn die Sitzung beginnt, und das war es.

2

Die Variablen werden bei der ersten Anforderung in den globalen Wert von $ _SESSION kopiert, sodass sie denselben Effekt wie das Kopieren in eine lokale Variable haben.

Aus Gründen der Übersichtlichkeit ist es jedoch sinnvoll, sie in eine lokale Variable zu kopieren. Vor allem, wenn Sie die Variable mehrmals verwenden möchten. Es kann schwierig sein, Code zu lesen, der überall $ _SESSION ['Variable'] hat.

Verwandte Themen