Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des PHP-Sitzungsfalls

Detaillierte Erläuterung des PHP-Sitzungsfalls

php中世界最好的语言
php中世界最好的语言Original
2018-05-16 11:09:291422Durchsuche

Dieses Mal werde ich Ihnen eine detaillierte Erklärung des PHP-Sitzungsfalls geben. Was sind die Vorsichtsmaßnahmen bei der Verwendung von PHP-Sitzung?

Cookies und Sitzungen sind zwei Konzepte, die von Neulingen in der Webentwicklung leicht verwechselt werden. Die Klärung der beiden hilft, die Webinteraktion besser zu verstehen. Persönlich denke ich, dass die Hauptunterschiede zwischen Sitzung und Cookie wie folgt sind:

Cookie

Die Informationen werden auf dem Client gespeichert.

Der Client ist verantwortlich für die spezifische Implementierung

Datengröße und -menge sind im Allgemeinen begrenzt

Daten können leicht gestohlen und manipuliert werden

Sitzung

Daten werden auf dem Server gespeichert

Der Server ist für die konkrete Umsetzung verantwortlich

Grundsätzlich gibt es keine Begrenzung hinsichtlich der Größe und Menge der Daten

Höhere Sicherheit und stark Glaubwürdigkeit

Im engeren Sinne bezieht sich Sitzung auf die Sitzungs-ID und die zugehörigen Daten in der Websitzung. Im weiteren Sinne bezieht sich Sitzung auf die interaktive Sitzung zwischen den kommunizierenden Parteien. Beispielsweise ist Benutzeranmeldung eine Sitzungsinteraktion, das Abheben von Geld an einem Geldautomaten ist eine Sitzungsinteraktion usw.

Sitzungsdetails

Die Hauptfunktion der Sitzung besteht darin, eine Sitzung zu identifizieren und Daten während der Sitzung zu speichern. Im Folgenden finden Sie einige Details der Sitzung.

Zugriff

PHP erhält und speichert alle Daten in der Sitzung über $_SESSIONsuper globale Variable. $_SESSION ist ein Array, das einfach zugewiesen und gelesen werden kann, zum Beispiel:

$name = $_SESSION['NAME'];  // 读取session中的name值
$_SESSION['NAME'] = 'new name';   // 赋新值
unset($_SESSION['NAME']);     // 移除session中的值

Ablaufzeit

Die Daten in der Standardsitzung können nach den Sitzungszeiten gelöscht werden out. Wird entfernt, abhängig davon, ob PHP die Garbage Collection rechtzeitig ausführt. Da der Koeffizient der PHP-Ausführung der Garbage Collection die Anzahl der Anfragen ist, ergeben sich folgende Konsequenzen: 1. Die Sitzungsdaten von Websites mit geringem Datenverkehr werden nach dem Timeout für eine lange Zeit nicht entfernt. 2. Websites mit hohem Datenverkehr führen häufig eine Sitzungs-Garbage Collection durch. 3. Ausführen von Garbage Bei Benutzern, bei denen eine Garbage Collection ausgeführt wird, kann es zu einer Systemverzögerung kommen, bevor die Sammlung die Anforderung des Benutzers ausführt. Eine bessere Lösung besteht darin, die standardmäßige Garbage Collection von PHP zu deaktivieren und die Funktion session_gc regelmäßig mit einem Cron-Task auszuführen. Dadurch wird nicht nur die Aktualität der Sitzung sichergestellt, sondern auch die Leistung und das Benutzererlebnis verbessert.

Um Daten in der Sitzung manuell zu entfernen, können Sie unset verwenden, um ein einzelnes Datenelement zu entfernen, oder die Funktion session_destroy, um alle Daten gewaltsam zu löschen.

Speichermedien und Serialisierung

Die Daten in der Sitzung werden standardmäßig in Form einer Datei auf der Festplatte gespeichert, Lesen Sie die Datei und der Inhalt wird umgekehrt und dann das Array $_SESSION gefüllt. Auf stark frequentierten Websites enthält das Verzeichnis, in dem Sitzungsdateien gespeichert sind, eine große Anzahl kleiner Dateien, was zu einer starken E/A-Belastung des Dateisystems führt.

Der Handler im Sitzungsmodul kann die Datenspeichermethode angeben, z. B. die Speicherung in einer Datenbank, Redis/Memcache und anderen Medien. Zu den integrierten Handlern von PHP gehören Dateien (Standard), Redis und Memcache. Benutzer können ihren eigenen Handler über session_set_save_handler registrieren. Die in der

Sitzung gespeicherten Daten können Basistypen wie String oder komplexe Typen wie Arrays und Objekte sein. Der serialize_handler in den Sitzungseinstellungen wird verwendet, um den Handler für die Serialisierung und Deserialisierung festzulegen. Nachdem der Handler die Daten serialisiert hat, werden sie zum Speichern an den save_handler übergeben. Aus der Serialisierung geht hervor, dass Typen wie Ressourcen nicht in der Sitzung gespeichert werden können und sollten. Die Idee, ein DB-Verbindungshandle für die Sitzung zu speichern und es dann 10 Minuten später zur Verwendung herauszunehmen, sollte so schnell wie möglich verworfen werden.

Name der Sitzungseinstellung

Da http ein zustandsloses Protokoll ist, muss der Client bei der Anfrage die Sitzungs-ID mitführen, damit der Server die Sitzung unterscheiden kann. Der Standardname, der die Sitzungs-ID identifiziert, ist PHPSESSID. Sie können session_name verwenden, um andere Namen festzulegen. Um beispielsweise zu verhindern, dass Angreifer vermuten, dass es sich beim Backend um ein PHP-Sprachsystem handelt, können Sie den Namen der Sitzungs-ID auf JSESSIONID setzen, um Angreifer zu verwirren.

Sitzung wird automatisch geöffnet

Die aktuelle Mainstream-PHP-Version öffnet die Sitzung standardmäßig nicht automatisch. Wenn sich ein Besucher beispielsweise nur die Seite ansieht und sie dann verlässt, wird die Sitzungs-ID nach einer Reihe von Initialisierungsvorgängen an den Client gesendet, damit der Benutzer beim nächsten Besuch identifiziert werden kann. Für einmalige Besucher oder nicht am System angemeldete Benutzer verursachen diese Vorgänge nur zusätzlichen Aufwand.

Der Nachteil, die Sitzung nicht automatisch zu öffnen, besteht darin, dass Sie vor der Verwendung der Sitzung sicherstellen müssen, dass die Sitzung geöffnet ist, da sonst möglicherweise leere Daten angezeigt werden. Wenn der Standardsitzungsname umbenannt wird, muss session_name vor session_start aufgerufen werden, um den aktuell verwendeten Sitzungsnamen anzugeben.

Verteilte Sitzung

Bei Websites mit großem Datenverkehr gibt es oft mehr als einen PHP-Server, der Dienste im Backend bereitstellt. Wenn mehrere Anfragen des Benutzers nicht auf demselben Server landen und die Sitzungsdaten des Servers nicht gemeinsam genutzt werden, muss sich der Benutzer möglicherweise wiederholt anmelden. Die Lösung dieses Problems kann durch die Anforderungsverteilung am Front-End oder durch die Einrichtung einer verteilten gemeinsamen Sitzung am Back-End erfolgen.

In Systemen, die Sitzungsdaten in Form von Dateien speichern, können Sie ein Verzeichnis als freigegebenes Verzeichnis angeben. In Systemen, die Sitzungen in redis/memcache/db speichern, werden alle Serversitzungen in diesem Verzeichnis gespeichert. usw. Die Sitzungsfreigabe kann durch die Konfiguration von Verbindungen zum gleichen Sitzungsserver erreicht werden. In einem System mit Sitzungsfreigabe kann der Front-End-Load-Balancer Anfragen nach Belieben an jeden Server verteilen.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung des Falles des Erhaltens von Nachrichtendaten mit PHP+Ajax

PHP-Curl-Stapelverarbeitung um eine kontrollierbare Parallelität zu erreichen. Detaillierte Erläuterung asynchroner Betriebsfälle

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-Sitzungsfalls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn