PHP implementiert die SESSION-Freigabe auf mehreren Servern

不言
Freigeben: 2023-03-24 14:58:02
Original
1855 Leute haben es durchsucht

Der Inhalt dieses Artikels handelt von der Realisierung einer Multi-Server-SESSION. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.

PHP realisiert eine Multi-Server-SESSION Teilen

Warum Session-Sharing nötig ist


Heutzutage haben etwas größere Websites grundsätzlich mehrere Subdomains, wie zum Beispiel www.feiniu.com, search.feiniu.com , member.feiniu.com, wenn diese Websites Benutzeranmeldeinformationen teilen müssen, müssen sie Sitzungen teilen. Voraussetzung ist natürlich, dass sie dieselbe Hauptdomäne haben.

PHP-Sitzungsprinzip

Der Client greift auf die PHP-Seite zu, führt session_start aus und generiert die session_id. Im Allgemeinen speichern wir die session_id im Cookie und der Sitzungsinhalt wird auf dem Server gespeichert. Der Clientzugriff ist unterschiedlich. Alle Seiten übergeben die Sitzungs-ID an den Server und erhalten den Sitzungsinhalt über die Sitzungs-ID.

Der Prozess ist wie folgt, aber verschiedene Server generieren unterschiedliche Sitzungs-IDs für denselben Client, sodass verschiedene Server nicht denselben Sitzungsinhalt erhalten können. Darüber hinaus werden die Standard-SESSION-Daten von PHP separat im Dateisystem dieses Servers gespeichert.

Wenn wir also die Sitzungsfreigabe lösen wollen, müssen wir zwei Probleme lösen:

Mehrere Server verwenden dieselbe Sitzungs-ID

这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以了
打开PHP.ini, 设置session.cookie_domain = .feiniu.com, 
当然也可以在php代码当中设置ini_set("session.cookie_domain","feiniu.com");
Nach dem Login kopieren
  • 1

  • 2

  • 3

  • 4

2. Mehrere Server verwenden dieselbe session_id, um auf denselben Sitzungsinhalt zuzugreifen

要实现这点,就必须把session内容存储到让所有服务器都能访问到的地方,php的session内容是默认存储到本服务器的文件中的,一般的解决方案是存入数据库,memcache或者redis这种缓存服务器,当然用默认的文件存储方式也可以,用NFS统一存储。

如何修改session存储引擎,参考这篇文章:http://blog.csdn.net/yagas/article/details/7593415
Nach dem Login kopieren
  • 1

  • 2

  • 3

  • 4

3. So wählen Sie eine Speicher-Engine aus

  • Standarddateispeicherung: Die Sitzungszerstörung hängt auf diese Weise vom PHP-Garbage Collector ab, was zu einer hohen Parallelität führt Lange Zerstörungszeit. Wenn es lang ist, wird eine große Anzahl von Dateien im SESSION-Verzeichnis generiert. Natürlich können Sie ein hierarchisches Verzeichnis zum Speichern von SESSION-Dateien einrichten. Dies führt zu zwei Problemen: Erstens ist das Auffinden von Dateien langsam; zweitens ist die Anzahl der Dateien, die in jedem Verzeichnis untergebracht werden können, begrenzt, was dazu führen kann, dass die neue SESSION nicht gespeichert werden kann.

  • Datenbankspeicherung: Das Speichern der Sitzung in der Datenbank kann verhindern, dass die Sitzungsdaten vom Garbage Collector gelöscht werden, und kann die Sitzungsdaten festigen und speichern. Die Verwendung einer Datenbank zum Synchronisieren von Sitzungen erhöht jedoch die E/A der Datenbank und erhöht die Belastung der Datenbank. Darüber hinaus ist die Lese- und Schreibgeschwindigkeit der Datenbank langsam, was einer zeitnahen Synchronisierung von Sitzungen nicht förderlich ist.

  • Memcache-Speicher:

    • Das Synchronisieren von Sitzungen auf diese Weise erhöht nicht die Belastung der Datenbank und erhöht die Sicherheit ist relativ hoch. Das Speichern der Sitzung im Speicher ist viel schneller als das Lesen aus der Datei.

    • Aber Memcache unterteilt den Speicher in Speicherblöcke mit vielen Spezifikationen. Diese Methode bestimmt auch, dass Memcache den Speicher nicht vollständig nutzen kann und zu einer Speicherfragmentierung führt Blöcke können einen Speicherüberlauf verursachen

    • Memcached bringt keine Vorteile für Anwendungen, die nicht „verteilt“ oder gemeinsam genutzt werden müssen oder einfach klein genug sind, um nur einen Server zu haben. Im Gegenteil. Dies verlangsamt die Systemeffizienz, da auch Netzwerkverbindungen Ressourcen erfordern.

  • Redis-Speicher: Im Vergleich zu Memcache ist der Redis-Zugriff etwas langsamer. Der Vorteil ist:

    • Redis unterstützt viele Datenstrukturen und kann Arrays oder Objekte speichern, während Memcache nur Zeichenfolgen speichern kann

    • Im Falle eines Neustarts der Sitzungsmaschine müssen alle Benutzer von Memcache die Sitzung wiederherstellen und redis wird nicht

    • Wenn plötzlich eine große Anzahl von Benutzern hereinkommt und viele Daten generiert, die den Speicher der Maschine füllen, die Sitzungen speichert, streikt Memcache und alle Schlüssel werden es tun nicht ablaufen. Die zuletzt geschriebenen Daten werden weiterhin überschrieben, und Redis wird nur langsamer und hat keinen Einfluss auf die Logik des Programms

    Verwandte Empfehlungen:

    PHP-Implementierungsmethode der NFS-Freigabe für die gemeinsame Nutzung von Sitzungen auf mehreren Servern_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonPHP implementiert die SESSION-Freigabe auf mehreren Servern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage