Dieser Artikel stellt hauptsächlich das Sitzungslernen in PHP vor, das einen gewissen Referenzwert hat. Jetzt können Freunde in Not darauf zurückgreifen.
Cookies und Sitzungen sind für Neulinge im Web leicht zu verwechseln Entwicklung von zwei Konzepten. Die Klärung der beiden wird zum besseren Verständnis der Webinteraktion beitragen. Persönlich denke ich, dass die Hauptunterschiede zwischen Sitzung und Cookie folgende sind:
Cookie
Die Informationen werden auf dem Client gespeichert
Die konkrete Umsetzung liegt beim Kunden. Das Ende ist verantwortlich
Datengröße und -menge sind im Allgemeinen begrenzt
Daten können leicht gestohlen und manipuliert werden
Sitzung
Daten werden auf dem Server gespeichert
Für die konkrete Umsetzung ist der Server verantwortlich
Grundsätzlich , die Größe und Menge der Daten sind unbegrenzt
Hohe Sicherheit und starke Glaubwürdigkeit
Sitzung im engeren Sinne bezieht sich auf die Sitzungs-ID und die zugehörigen Daten in der Websitzung. und Sitzung im weiteren Sinne bezieht sich auf die interaktive Sitzung zwischen den kommunizierenden Parteien. Beispielsweise ist die Benutzeranmeldung eine Sitzungsinteraktion, das Abheben von Geld an einem Geldautomaten eine Sitzungsinteraktion und so weiter.
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 die superglobale Variable $_SESSION. $_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
Daten in der Standardsitzung kann nach Ablauf der Sitzungszeit entfernt werden, 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 einer Zeitüberschreitung nicht lange 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 Systemverzögerungen 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. Beim Öffnen der Sitzung wird der Dateiinhalt gespeichert wird gelesen, deserialisiert und dann mit dem 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 Zeichenfolgen 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 abgerufen 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 Anforderungsverteilung am Front-End oder durch Einrichten 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 usw. speichern, werden alle Serversitzungen in diesem Verzeichnis gespeichert. Die Konfiguration der Verbindung zur Sitzungsfreigabe kann mit demselben Sitzungsserver erfolgen. In einem System mit Sitzungsfreigabe kann der Front-End-Load-Balancer Anfragen nach Belieben an jeden Server verteilen.
Verwandte Empfehlungen:
PHP realisiert SESSION-Sharing auf mehreren Servern
Das obige ist der detaillierte Inhalt vonSitzungslernen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!