Heim >Backend-Entwicklung >PHP-Tutorial >Analysieren Sie das SESSION-Prinzip in PHP und die zu beachtenden Probleme bei der Anwendung auf große Websites
PHP-SESSION-Prinzip
Wir wissen, dass Sitzung eine Methode zum Verwalten von Benutzersitzungsdaten auf der Serverseite ist und das entsprechende Cookie dazu dient, Benutzerdaten auf der Clientseite zu verwalten. Das HTTP-Protokoll ist ein zustandsloses Protokoll. Nachdem der Server antwortet, verliert er den Kontakt zum Browser. Frühestens hat Netscape Cookies in den Browser eingeführt, damit Daten seitenübergreifend vom Client ausgetauscht werden können vieler Benutzer? Was ist mit den Daten?
Zunächst müssen Client und Server einzeln kontaktiert werden. Jeder Client muss über eine eindeutige Kennung verfügen, damit der Server ihn identifizieren kann. Es wird empfohlen, zwei Methoden zur eindeutigen Identifizierung zu verwenden: Cookie oder Angabe über GET. Die Standardkonfiguration von PHP erstellt bei Verwendung einer Sitzung ein Cookie mit dem Namen „PHPSESSID“ (kann durch Ändern des Werts „session.name“ in php.ini angegeben werden). Wenn der Client Cookies deaktiviert, können Sie auch angeben, dass die Sitzungs-ID an übergeben werden soll über GET. Server (Parameter wie session.use_trans_sid in php.ini ändern).
Wenn wir das serverseitige Verzeichnis session.save_path überprüfen, finden wir viele Dateien, die sess_vv9lpgf0nmkurgvkba1vbvj915 ähneln. Dies sind tatsächlich die Daten, die der Sitzungs-ID „vv9lpgf0nmkurgvkba1vbvj915“ entsprechen. Die Wahrheit ist, dass der Client die Sitzungs-ID an den Server weitergibt. Beim Lesen wird der Dateiinhalt deserialisiert, um den Sitzungswert zu erhalten geschrieben.
Dies ist eine Tatsache. Wenn der Server also keine Sitzung unterstützt oder Sie die Sitzung anpassen möchten, können Sie sie selbst erstellen und die Uniqid von PHP verwenden, um eine Sitzungs-ID zu generieren, die niemals wiederholt wird, und dann eine finden Ort zum Speichern des Sitzungsinhalts Sie können auch lernen, wie Flickr Sitzungen in einer MySQL-Datenbank speichert.
Warum müssen Sie session_start() ausführen, bevor Sie session verwenden?
Nachdem wir das Prinzip verstanden haben, handelt es sich bei der sogenannten Sitzung tatsächlich um eine Sitzungs-ID auf der Clientseite und eine Sitzungsdatei auf der Serverseite. Durch Ausführen von session_start() vor dem Erstellen einer neuen Sitzung wird der Server angewiesen, ein Cookie zu platzieren und das vorzubereiten Sitzungsdatei, andernfalls wird Ihr Sitzungsinhalt gespeichert. Durch Ausführen von session_start() vor dem Lesen der Sitzung wird der Server angewiesen, die Sitzungsdatei entsprechend der Sitzungs-ID schnell zu deserialisieren.
Vor session_start() kann nur eine Sitzungsfunktion ausgeführt werden: Lesen oder geben Sie den Sitzungsnamen an (der Standardwert ist beispielsweise „PHPSESSID“). Dies muss natürlich vor session_start ausgeführt werden.
Sitzung beeinflusst die Systemleistung
Sitzung beeinflusst die Systemleistung auf Websites mit vielen Besuchen. Einer der Gründe für die Beeinträchtigung der Leistung ist das Dateisystemdesign. Wenn sich mehr als 10.000 Dateien im selben Verzeichnis befinden Die Positionierung der Dateigröße ist sehr zeitaufwändig. PHP unterstützt den Sitzungsverzeichnis-Hash. Wir können session.save_path = „2;/path/to/session/dir“ in php.ini ändern, dann wird die Sitzung auf zwei Ebenen gespeichert Unterverzeichnisse, jedes Verzeichnis hat 16 Unterverzeichnisse [0~f], aber es scheint, dass die PHP-Sitzung das Erstellen von Verzeichnissen nicht unterstützt. Sie müssen diese Verzeichnisse im Voraus erstellen.
Ein weiteres Problem ist die Effizienz kleiner Dateien. Im Allgemeinen sind unsere Sitzungsdaten nicht zu groß (1 bis 2 KB). Wenn sich eine große Anzahl von 1 bis 2 KB-Dateien auf der Festplatte befindet, wird die E/A-Effizienz definitiv beeinträchtigt Das ist sehr schlecht. Das PHP-Handbuch empfiehlt die Verwendung des Reiserfs-Dateisystems, aber die Zukunft von Reiserfs ist besorgniserregend. Der Autor von Reiserfs hat seine Frau getötet, und auch SuSE hat Reiserfs aufgegeben.
Tatsächlich gibt es viele Möglichkeiten, Sitzungen zu speichern, die über php -i|grep „Registrierte Speicherhandler“ angezeigt werden können, z. B. Registrierte Speicherhandler => Dateien des Benutzers SQLite Eaccelerator können über Dateien angezeigt werden. Benutzer, SQLite, Eaccelerator Zum Speichern gibt es auch die Option mmcache, wenn auf dem Server Memcached installiert ist. Natürlich gibt es noch viele weitere, wie MySQL, PostgreSQL usw. Alles sind gute Entscheidungen.
Sitzungssynchronisierung
Unser Frontend verfügt möglicherweise über viele Server. Der Benutzer meldet sich auf Server A an, pflanzt die Sitzungsinformationen ein, besucht dann einige Seiten der Website und springt möglicherweise zu Server B. Wenn bei Dieses Mal gibt es keine Sitzungsinformationen auf Server B und es wird keine spezielle Verarbeitung durchgeführt, sodass Probleme auftreten können.
Es gibt viele Arten der Sitzungssynchronisierung. Wenn Sie sie in Memcached oder MySQL speichern, können Sie sie einfach am selben Ort speichern. Wenn sie in Dateiform vorliegt, können Sie sie einheitlich speichern.
Eine andere Möglichkeit besteht darin, verschlüsselte Cookies zu verwenden. Wenn sich der Benutzer erfolgreich auf Server A anmeldet, wird ein verschlüsseltes Cookie im Browser des Benutzers platziert. Überprüfen Sie, ob eine Sitzung vorliegt Wenn nicht, prüfen Sie, ob das Cookie gültig ist. Stellen Sie die Sitzung auf Server B wieder her. Diese Methode ist tatsächlich sehr nützlich, wenn die Website viele Unterkanäle hat und sich die Server nicht im selben Computerraum befinden und Sie sich einheitlich anmelden möchten.
Natürlich besteht eine andere Methode darin, die Sitzung auf der Lastausgleichsebene aufrechtzuerhalten und den Besucher an einen bestimmten Server zu binden, und es ist keine Sitzungssynchronisierung erforderlich Alles Es ist etwas auf der Betriebs- und Wartungsebene. Das ist alles. Seien Sie nicht schüchtern, nur weil alle sagen, dass Sitzungen die Systemleistung beeinträchtigen. Wenn Sie es sich nicht leisten können, zu beleidigen oder zu verstecken hier nicht geeignet.