Dieser Artikel führt Sie in das Wissen über PHP-Sitzungen ein. Beginnen wir damit, warum es diese Art der Sitzungsfreigabe gibt. Ich hoffe, dass er für Freunde, die sie benötigen, hilfreich sein wird . Die Lösung?
Da die Projekte von Internetunternehmen in Mikrodiensten und verteilten Umgebungen erstellt werden, kann ein Projekt in mehreren oder sogar vielen Serverclustern bereitgestellt werden. Zu diesem Zeitpunkt tritt ein Problem auf:
Wenn der Benutzer beispielsweise eine Sitzung durchführt Wenn sich ein Benutzer bei einem Projekt anmeldet, verwenden die meisten Projekte großer Unternehmen Nginx für Reverse-Proxy.Hier ist eine kurze Liste mehrerer Reverse-Proxy-Strategien, die häufig von Nginx verwendet werden:
Polling-Strategie, Gewichtsverhältnisstrategie, ip_hash Strategie und anpassbare Strategien.
Unter dem Reverse-Proxy von Nginx werden Benutzeranforderungen im Allgemeinen an verschiedene Server verteilt. Wenn die Anforderung des Benutzers jedoch auf Server A gespeichert ist, wird die Sitzungs-ID des Benutzers in einer ConcurrentHashmap der JVM gespeichert auf dem Server, mit der Sitzungs-ID als Schlüssel. Wenn jedoch zu diesem Zeitpunkt ein vom Benutzer angefordertes Servicemodul möglicherweise an Server B aufgerufen werden muss, wird die Sitzungs-ID des Benutzers zu diesem Zeitpunkt nicht auf Server B gespeichert, wenn der Benutzer die Anforderung initiiert, sodass der Benutzer gefragt wird um erneut einen Anmeldevorgang durchzuführen. Es kann auch dazu kommen, dass der Benutzer ursprünglich einen Bestellvorgang abschließen wollte, sich aber mehrmals angemeldet hat. Daher ist die Session-Sharing-Lösung insbesondere in verteilten Umgebungen und Microservice-Systemen wichtig. [Empfohlenes Lernen: „PHP-Video-Tutorial
“]Lösung 1: Nginx-basierter ip_hash-Lastausgleich
Tatsächlich besteht es darin, einen Modulus der Anzahl der verfügbaren Server zu verwenden, die Sie haben, basierend auf der angeforderten IP-Adresse und Dann wird Ihre Anfrage über den Reverse-Proxy von Nginx an den entsprechenden Server verteilt. (Die verfügbaren Server werden hier in ein Array eingefügt. Wenn das Ergebnis der Modulo-Berechnung 0 ist, wird die Anfrage dem Server mit dem Index 0 im Server-Array zugewiesen.) Spezifische Implementierung: Sie müssen in Nginx sein. Nehmen Sie entsprechende Änderungen in der .conf-Datei entsprechend Ihrem eigenen verfügbaren Server vor Anfragen Kopieren Sie die generierte Sitzungs-ID auf alle Server im System, um sicherzustellen, dass Server A bei Benutzeranfragen das Modul auf Server B aufrufen kann und Dienst B auch über die Sitzungs-ID des Benutzers verfügt, sodass der Benutzer nicht gefragt wird um sich erneut anzumelden. Das löst das Problem. Wie implementiert man die Sitzungsreplikation in einem bestimmten Code?Vor- und Nachteile der Verwendung der Sitzungsreplikation:
Lösung 3: Verwenden Sie Redis als einheitlichen Cache zum Zwischenspeichern der Sitzung.
Diese Lösung besteht tatsächlich darin, die bei jeder Benutzeranfrage generierte Sitzungs-ID anzugeben der Redis-Server. Legen Sie dann einen Ablaufzeitmechanismus basierend auf den Eigenschaften von Redis fest, um sicherzustellen, dass sich Benutzer während der von uns festgelegten Sitzungsablaufzeit in Redis nicht erneut anmelden müssen.
So implementieren Sie den Code:
Vor- und Nachteile der Verwendung von Redis zum Implementieren der Sitzungsfreigabe:
Lösung 4: Kombinieren von Cookies
Tatsächlich können Sie die Sitzung auch in das Cookie einfügen, weil Jedes Mal, wenn der Benutzer eine Anfrage stellt, wird ein eigenes Cookie in die Anfrage eingefügt, sodass sichergestellt werden kann, dass sich der Benutzer bei jeder Anfrage des Benutzers nicht zweimal in einer verteilten Umgebung anmeldet.
Das obige ist der detaillierte Inhalt vonLassen Sie uns über vier Lösungen für die PHP-Sitzungsfreigabe sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!