Heim >php教程 >PHP开发 >Analysieren Sie die Implementierungsprinzipien von Sitzungen in PHP und die Probleme, auf die bei der Anwendung großer Websites geachtet werden sollte

Analysieren Sie die Implementierungsprinzipien von Sitzungen in PHP und die Probleme, auf die bei der Anwendung großer Websites geachtet werden sollte

黄舟
黄舟Original
2016-12-13 11:58:301146Durchsuche

PHP SESSION-Prinzip
Wir wissen, dass Sitzung eine Methode zum Verwalten von Benutzersitzungsdaten auf der Serverseite ist, und das entsprechende Cookie ist dies Behalten Sie Benutzerdaten auf der Clientseite. Das HTTP-Protokoll ist ein zustandsloses Protokoll, nachdem der Server den Kontakt zum Browser verloren hat Daten können seitenübergreifend vom Client ausgetauscht werden. Wie merkt sich der Server also die Sitzungsdaten vieler Benutzer?

Zunächst müssen der Client und der 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 verwendet Sitzung Es wird ein Cookie mit dem Namen „PHPSESSID“ erstellt (kann durch Ändern des Werts „session.name“ in php.ini angegeben werden). Sie können die abzurufende Sitzung auch über GET angeben Die ID wird an den Server übertragen (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 Tatsächlich handelt es sich um die Daten, die der Sitzungs-ID „vv9lpgf0nmkurgvkba1vbvj915“ entsprechen. Die Wahrheit ist hier, dass der Kunde eine Sitzung durchführen wird Die ID wird an den Server übergeben, und der Server übergibt sie entsprechend der Sitzung Suchen Sie die entsprechende Datei anhand der ID. Deserialisieren Sie beim Lesen den Dateiinhalt, um den Sitzungswert zu erhalten. Beim Speichern wird zuerst serialisiert und dann geschrieben.

Das ist eine Tatsache Wenn also der Server keine Sitzung unterstützt oder Sie die Sitzung anpassen möchten, können Sie über die Uniqid von PHP selbst eine Sitzung generieren, die niemals wiederholt wird. id, und finden Sie dann einen Ort zum Speichern des Sitzungsinhalts. Sie können auch lernen, wie Flickr die Sitzung in einer MySQL-Datenbank speichert.

Warum müssen Sie session_start() ausführen, bevor Sie session verwenden?
Nach dem Verständnis des Prinzips handelt es sich bei der sogenannten Sitzung tatsächlich um eine Sitzungs-ID auf der Clientseite und eine Sitzung auf der Serverseite. Wenn Sie session_start() vor dem Erstellen einer neuen Sitzung ausführen, wird der Server angewiesen, ein Cookie zu setzen und die Sitzungsdatei vorzubereiten So speichern Sie Sitzungsinhalte: Durch Ausführen von session_start() vor dem Lesen der Sitzung wird der Server angewiesen, der Sitzung schnell zu folgen id deserialisiert die Sitzungsdatei.

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 wirkt sich auf die Systemleistung aus
Sitzung Die Systemleistung wird tatsächlich auf Websites mit hohem Verkehrsaufkommen beeinträchtigt. 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, ist die Dateipositionierung sehr zeitaufwändig Sitzungsverzeichnis-Hash, wir können session.save_path = in php.ini ändern "2;/path/to/session/dir", dann wird die Sitzung in zweistufigen Unterverzeichnissen gespeichert, jedes Verzeichnis hat 16 Unterverzeichnisse [0~f], aber es scheint, dass PHP Die Sitzung unterstützt das Erstellen von Verzeichnissen nicht. Sie müssen diese Verzeichnisse im Voraus erstellen.

Ein weiteres Problem ist die Effizienz kleiner Dateien Die Sitzungsdaten werden nicht zu groß sein (1 bis 2 KB), wenn sich auf der Festplatte eine große Anzahl von 1 bis 2 KB befindet. Das PHP-Handbuch empfiehlt die Verwendung des Reiserfs-Dateisystems. System, aber die Zukunft von Reiserfs ist besorgniserregend. Der Autor von Reiserfs hat seine Frau getötet, und auch SuSE hat Reiserfs aufgegeben.

Eigentlich gibt es noch viel mehr Die Art und Weise, wie Sitzungen gespeichert werden, kann über php -i|grep „Registrierte Speicherhandler“ angezeigt werden, z. B. „Registrierte Speicherung“. Handler => Dateien Benutzer SQLite Eaccelerator kann über Dateien, Benutzer, SQLite und Eaccelerator gespeichert werden. Wenn der Server mit Memcached installiert ist, gibt es auch mmcache. Optionen. Natürlich gibt es noch viele weitere, wie MySQL, PostgreSQL usw. Alles sind gute Entscheidungen.

Sitzungssynchronisation
Unser Frontend verfügt möglicherweise über viele Server. Der Benutzer meldet sich auf Server A an, pflanzt die Sitzungsinformationen ein und greift dann auf einige Seiten der Website zu und ist möglicherweise zu Server B gesprungen Zeit Wenn keine Sitzungsinformationen auf dem Server vorhanden sind und keine spezielle Verarbeitung durchgeführt wird, können Probleme auftreten.
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 bei Server A anmeldet, wird ein verschlüsseltes Cookie im Browser des Benutzers platziert. Überprüfen Sie, ob ein solches vorhanden ist Sitzung, falls vorhanden, stellt dies natürlich kein Problem dar. Wenn nicht, überprüfen Sie, ob das Cookie gültig ist, und stellen Sie die Sitzung auf Server B wieder her. Diese Methode ist eigentlich ziemlich Dies ist sehr nützlich, wenn die Website über viele Unterkanäle verfügt, die Server nicht im selben Computerraum stehen, die Sitzungen nicht synchronisiert werden können und Sie sich einheitlich anmelden möchten.

Natürlich geht es auch anders Es verwaltet die Sitzung auf der Lastausgleichsebene und bindet den Besucher an einen bestimmten Server. Eine Sitzungssynchronisierung ist nicht erforderlich. Sag das einfach Es gibt so viele, entscheiden Sie sich dafür, die Sitzung entsprechend Ihrer eigenen Anwendung zu verwenden, denn jeder sagt, dass die Sitzung die Systemleistung beeinträchtigt, wenn Sie es sich nicht leisten können, zu beleidigen oder zu verstecken , Sie sind hier nicht geeignet.


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