Heim php教程 PHP开发 So verwenden Sie Memcache, um Sitzungsdaten in thinkPHP mit mehreren Domänennamen zu teilen

So verwenden Sie Memcache, um Sitzungsdaten in thinkPHP mit mehreren Domänennamen zu teilen

Dec 22, 2016 am 10:13 AM
session

Das Beispiel in diesem Artikel beschreibt die Implementierungsmethode der Verwendung von Memcache zum Teilen von Sitzungsdaten in thinkPHP mit mehreren Domänennamen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

1 Ursprung des Problems

Etwas größere Websites haben normalerweise mehrere Server, auf denen jeweils Module mit unterschiedlichen Funktionen ausgeführt werden Domänennamen der zweiten Ebene, aber für eine hochintegrierte Website ist das Benutzersystem einheitlich, das heißt, eine Reihe von Benutzernamen und Passwörtern können angemeldet und in jedem Modul der gesamten Website verwendet werden. Es ist für jeden Server relativ einfach, Benutzerdaten auszutauschen. Sie müssen lediglich einen Datenbankserver im Backend installieren, und jeder Server kann über eine einheitliche Schnittstelle auf Benutzerdaten zugreifen. Es besteht jedoch immer noch ein Problem: Nachdem sich der Benutzer bei diesem Server angemeldet hat, muss er sich beim Betreten anderer Module eines anderen Servers erneut anmelden. Dies ist eine einmalige Anmeldung, und alle gängigen Probleme werden zugeordnet Tatsächlich handelt es sich um die Art und Weise, wie SESSION-Daten zwischen verschiedenen Servern ausgetauscht werden.

2. Das Funktionsprinzip von PHP SESSION

Bevor wir das Problem lösen, wollen wir zunächst das Funktionsprinzip von PHP SESSION verstehen. Wenn sich der Client (z. B. ein Browser) bei der Website anmeldet, kann die besuchte PHP-Seite session_start() verwenden, um die SESSION zu öffnen, wodurch die eindeutige SESSION-ID des Clients generiert wird (diese ID kann über die Funktion session_id abgerufen/festgelegt werden). ()). Die SESSION-ID kann auf zwei Arten auf dem Client gespeichert werden, sodass das PHP-Programm beim Anfordern verschiedener Seiten die SESSION-ID des Clients lernen kann. Zum einen wird die SESSION-ID standardmäßig automatisch zur GET-URL oder zum POST-Formular hinzugefügt . Unten ist der Variablenname PHPSESSID; der andere dient zum Speichern der SESSION-ID im COOKIE. Standardmäßig ist der Name dieses COOKIES PHPSESSID. Hier verwenden wir zur Erläuterung hauptsächlich die COOKIE-Methode, da diese weit verbreitet ist.

Wo werden also die SESSION-Daten gespeichert? Natürlich auf der Serverseite, aber statt im Speicher wird es in einer Datei oder Datenbank gespeichert. Standardmäßig ist die in php.ini festgelegte SESSION-Speichermethode Dateien (session.save_handler = files). Das heißt, die SESSION-Daten werden durch Lesen und Schreiben von Dateien gespeichert, und das Verzeichnis, in dem die SESSION-Datei gespeichert wird, wird durch die Sitzung angegeben. save_path, und der Dateiname beginnt mit sess _ ist das Präfix, gefolgt von SESSIONID, wie zum Beispiel: sess_c72665af28a8b14c0fe11afe3b59b51b. Die Daten in der Datei sind die SESSION-Daten nach der Serialisierung. Wenn die Zugriffsmenge groß ist, werden möglicherweise mehr SESSION-Dateien generiert. In diesem Fall können Sie ein hierarchisches Verzeichnis zum Speichern von SESSION-Dateien einrichten, was die Effizienz erheblich verbessert. Die Einstellungsmethode lautet: session.save_path=". N;/save_path“, N ist hierarchisch. Ebene, save_path ist das Startverzeichnis. Beim Schreiben von SESSION-Daten ruft PHP die SESSION_ID des Clients ab und verwendet dann diese SESSION-ID, um die entsprechende SESSION-Datei im angegebenen SESSION-Dateispeicherverzeichnis zu finden. Wenn sie nicht vorhanden ist, erstellen Sie sie und serialisieren Sie schließlich die Daten und schreiben Sie sie hinein die Datei. Das Lesen von SESSION-Daten ist ein ähnlicher Vorgang. Die gelesenen Daten müssen deserialisiert und die entsprechende SESSION-Variable generiert werden.

3. Die Haupthindernisse und Lösungen für die gemeinsame Nutzung von SESSION auf mehreren Servern

Wenn wir das Funktionsprinzip von SESSION verstehen, können wir feststellen, dass jeder Server standardmäßig denselben Client generiert Für denselben Benutzerbrowser lautet die von Server A generierte SESSION-ID beispielsweise 30de1e9de3192ba6ce2992d27a1b6a0a, während die von Server B generierte SESSION-ID c72665af28a8b14c0fe11afe3b59b51b ist. Darüber hinaus werden die SESSION-Daten von PHP separat im Dateisystem dieses Servers gespeichert.

Nachdem Sie das Problem identifiziert haben, können Sie mit der Lösung beginnen. Wenn Sie SESSION-Daten teilen möchten, müssen Sie zwei Ziele erreichen: Zum einen muss die von jedem Server für denselben Client generierte SESSION-ID dieselbe sein und über dasselbe COOKIE weitergeleitet werden können, was bedeutet, dass jeder Server dazu in der Lage sein muss Lesen Sie die gleiche SESSION-ID. Das andere COOKIE mit dem Namen PHPSESSID ist die Speichermethode/der Speicherort der SESSION-Daten, auf die alle Server zugreifen können. Einfach ausgedrückt teilen sich mehrere Server die SESSION-ID des Clients und müssen auch die SESSION-Daten des Servers teilen.

Die Umsetzung des ersten Ziels ist eigentlich sehr einfach. Sie müssen lediglich die Domäne von COOKIE speziell festlegen. Standardmäßig ist die Domäne von COOKIE der Domänenname/die IP-Adresse des aktuellen Servers Wenn sie unterschiedlich sind, können die von den einzelnen Servern gesetzten COOKIEs nicht auf die anderen zugreifen. Beispielsweise kann der Server von www.aaa.com die vom Server von www.bbb.com gesetzten COOKIEs nicht lesen und schreiben. Die Server derselben Website, über die wir hier sprechen, haben ihre eigene Besonderheit, das heißt, sie gehören zur gleichen Domäne der ersten Ebene. Beispiel: tieba.xiaoyuan.com und www.xiaoyuan.com gehören beide zur Domäne .xiaoyuan .com, dann können wir die Domain des COOKIES auf .xiaoyuan.com setzen, damit tieba.xiaoyuan.com, www.xiaoyuan.com usw. auf dieses COOKIE zugreifen können. Die Einstellungsmethode im PHP-Code lautet wie folgt:

<?php
ini_set(&#39;session.cookie_domain&#39;, &#39;.xiaoyuan.com&#39;);
?>
Nach dem Login kopieren

Auf diese Weise wird der Zweck erreicht, dass jeder Server dieselbe Client-SESSION-ID verwendet.

Das zweite Ziel kann durch die Verwendung von Dateifreigabe erreicht werden. Es gibt zwei Möglichkeiten, es zu lösen: Eine besteht darin, eine Datenspeichersitzung zu verwenden, und die andere darin, Memcache auszuprobieren. Verwenden Sie MEMCACHE, um es hier zu lösen.

Ich verwende das Thinkphp-Framework, das bereits den Memcache-Zugriff auf Sitzungen unterstützt. Nach dem Einrichten des Memcache-Servers müssen Sie nur die IP und den Port von Memcache in der Konfigurationsdatei festlegen und dann den Parameter COOKIE_DOMAIN angeben Drücken Sie, um die Sitzung wie gewohnt zu betreiben. Zu diesem Zeitpunkt können Sie die Sitzung mit mehreren Domänennamen teilen.

Ich hoffe, dass dieser Artikel für alle auf dem ThinkPHP-Framework basierenden PHP-Programmierungen hilfreich sein wird.

Weitere thinkPHP-Implementierungsmethoden zur Verwendung von Memcache zum Teilen von Sitzungsdaten unter mehreren Domänennamen finden Sie auf der chinesischen PHP-Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest May 15, 2023 pm 02:37 PM

Das Problem wurde im Springboot-Projekt-Produktions-Session-Out-Timeout gefunden: In der Testumgebung wurde der Session-Out durch Ändern der application.yaml konfiguriert, nachdem die Session-Out-Konfiguration überprüft wurde In Kraft trat, wurde die Ablaufzeit für die Veröffentlichung in der Produktionsumgebung direkt auf 8 Stunden festgelegt. Allerdings habe ich am Mittag die Rückmeldung von Kunden erhalten, dass die Projektablaufzeit kurz eingestellt wurde. Wenn eine halbe Stunde lang keine Aktion ausgeführt wird, läuft die Sitzung ab und erfordert wiederholte Anmeldungen. Lösen Sie das Problem der Handhabung der Entwicklungsumgebung: Das Springboot-Projekt verfügt über integriertes Tomcat, sodass der in application.yaml im Projekt konfigurierte Sitzungsausgang wirksam ist. Produktionsumgebung: Die Produktionsumgebung ist freigegeben

So beheben Sie Sitzungsfehler So beheben Sie Sitzungsfehler Oct 18, 2023 pm 05:19 PM

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung für das domänenübergreifende Problem der PHP-Sitzung Lösung für das domänenübergreifende Problem der PHP-Sitzung Oct 12, 2023 pm 03:00 PM

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Jan 18, 2023 pm 01:39 PM

Lösung für das Problem, dass die PHP-Sitzung nach der Aktualisierung verschwindet: 1. Öffnen Sie die Sitzung über „session_start();“ 2. Schreiben Sie alle öffentlichen Konfigurationen in eine PHP-Datei 3. Der Variablenname darf nicht mit dem Array-Index identisch sein; 4. Überprüfen Sie einfach den Speicherpfad der Sitzungsdaten in phpinfo und prüfen Sie, ob die Sitzung im Dateiverzeichnis erfolgreich gespeichert wurde.

Was ist die Standardablaufzeit von Session PHP? Was ist die Standardablaufzeit von Session PHP? Nov 01, 2022 am 09:14 AM

Die Standardablaufzeit der Sitzungs-PHP beträgt 1440 Sekunden, also 24 Minuten. Das heißt, wenn der Client länger als 24 Minuten nicht aktualisiert wird, läuft die aktuelle Sitzung ab, wenn der Benutzer den Browser schließt Die Sitzung wird nicht mehr existieren.

So lesen und schreiben Sie Sitzungsdaten in mehreren Dateien mit PHP korrekt So lesen und schreiben Sie Sitzungsdaten in mehreren Dateien mit PHP korrekt Mar 23, 2023 am 11:12 AM

Wenn Sie eine PHP-Sitzung (Sitzung) verwenden, werden Sie manchmal feststellen, dass die Sitzung in einer Datei normal gelesen werden kann, in einer anderen Datei jedoch nicht. Dies kann Sie verwirren, da Sitzungsdaten in der gesamten Anwendung gemeinsam genutzt werden sollen. In diesem Artikel wird erläutert, wie Sie PHP-Sitzungsdaten in mehreren Dateien korrekt lesen und schreiben.

So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen Jun 03, 2023 pm 03:11 PM

1. Implementieren der SMS-Anmeldung basierend auf der Sitzung 1.1 Ablaufdiagramm der SMS-Anmeldung 1.2 Implementieren des Sendens eines SMS-Bestätigungscodes Beschreibung der Front-End-Anfrage: Beschreibung der Anfragemethode POST-Anfragepfad/Benutzer/Code-Anfrageparameter Telefon (Telefonnummer) Rückgabewert Keine Back-End-Schnittstelle Implementierung: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Überprüfen Sie die Mobiltelefonnummer, wenn

So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist May 22, 2023 pm 01:49 PM

Problem: Heute ist in unserem Projekt ein Zeitüberschreitungsproblem aufgetreten, und Änderungen an den application.properties von SpringBoot2 wurden nie wirksam. Lösung: Die server.*-Eigenschaften werden verwendet, um den eingebetteten Container zu steuern, der von SpringBoot verwendet wird. SpringBoot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Eigenschaften, um den kontrollierten Servlet-Container (Tomcat, Jetty usw.) zu konfigurieren. Wenn die Anwendung als WAR-Datei auf einer Tomcat-Instanz bereitgestellt wird, gelten die server.*-Eigenschaften nicht. Sie gelten nicht,

See all articles