Heim > php教程 > PHP开发 > Hauptteil

Drei Möglichkeiten, Sitzungen über Subdomänen hinweg in PHP zu implementieren

高洛峰
Freigeben: 2016-12-24 09:09:20
Original
1144 Leute haben es durchsucht

Als ich früher Dinge erstellte, wurde die Sitzung normalerweise direkt in der Datenbank gespeichert, sodass das Problem der domänenübergreifenden und nicht nur der subdomänenübergreifenden Arbeit gelöst werden konnte. Das Problem, auf das ich heute gestoßen bin, war jedoch, dass ich dies tun musste Änderungen an den vorhandenen Dingen anderer Leute vornehmen. Da es sich nur um eine Subdomain handelte, dachte ich, dass es eine einfache Lösung geben muss:

Sitzung ist hauptsächlich in zwei Teile unterteilt:

Einer sind Sitzungsdaten. Diese Daten werden standardmäßig in der TMP-Datei des Servers gespeichert und liegen in Form einer Datei vor.

Die andere ist die Sitzungs-ID, die die Sitzungsdaten kennzeichnet. Die Sitzungs-ID ist der Dateiname der Sitzungsdatei, sodass die Eindeutigkeit und Zufälligkeit sichergestellt werden kann Sicherheit der Sitzung. Wenn die Lebensdauer der Sitzung nicht festgelegt ist, wird die Sitzungs-ID im Allgemeinen im Speicher gespeichert. Nach dem Schließen des Browsers wird die ID automatisch abgemeldet. Nach erneuter Anforderung der Seite wird eine neue Sitzungs-ID registriert. Wenn der Client Cookies nicht deaktiviert, übernimmt das Cookie beim Starten der Sitzung die Aufgabe, die Sitzungs-ID und die Sitzungslebensdauer zu speichern.

Zwei verschiedene Domainnamen-Websites möchten dieselbe Sitzung verwenden, was zu sitzungsübergreifenden domänenübergreifenden Problemen führt!

Standardmäßig generiert jeder Server eine SESSIONID für denselben Client. Beispielsweise lautet die von Server A generierte SESSION-ID 11111111111, während die von Server B generierte SESSION-ID lautet ist 222222. Darüber hinaus werden die SESSION-Daten von PHP separat im Dateisystem dieses Servers gespeichert. Wenn Sie SESSION-Daten teilen möchten, müssen Sie zwei Ziele erreichen:

Eines besteht darin, dass die von jedem Server für denselben Client generierte SESSION-ID dieselbe sein muss und über dasselbe COOKIE weitergeleitet werden kann. Das heißt, dass jeder Server in der Lage sein muss, dasselbe COOKIE mit dem Namen PHPSESSID zu lesen.

Das andere ist, dass die Speichermethode/der Speicherort der SESSION-Daten sicherstellen muss, dass jeder Server darauf zugreifen kann. Vereinfacht ausgedrückt bestehen diese beiden Ziele darin, dass mehrere Server (A- und B-Server) die SESSION-ID des Clients gemeinsam nutzen und auch die SESSION-Daten des Servers gemeinsam nutzen müssen.

Es gibt drei Lösungen:

1 Führen Sie einfach das Folgende ganz am Anfang der PHP-Seite aus (vor jeder Ausgabe und vor session_start()). Setzen Sie

ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.mydomain.com');
ini_set('session.cookie_lifetime', '1800');
Nach dem Login kopieren

2. Setzen Sie

session.cookie_path = /
session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
Nach dem Login kopieren

in php.ini

3. Rufen Sie die Funktion

session_set_cookie_params(1800 , '/', '.mydomain.com');
Nach dem Login kopieren

ganz am Anfang der PHP-Seite auf (Bedingungen sind die gleichen wie 1)

Sitzung hat Session_id als einzige Kennung der Sitzung .

Um die Sitzungsunterdomäne zu implementieren, sind ihre Sitzungen tatsächlich identisch, wenn im selben Browser auf zwei A- und B-Unterdomänen zugegriffen wird.

Wie können die beiden Server erkennen, dass diese beiden Anfragen von einem Browser ausgegeben werden, da die Sitzung auf der Serverseite gespeichert wird?

Cookies werden normalerweise auf dem Client gespeichert. Daher können Sie Cookies verwenden, um die Sitzungs-ID zu speichern und das Cookie als übergeordnete Domäne festzulegen.

Beim Besuch von a.sso.com wird beispielsweise die session_id im Cookie gespeichert. Beim Zugriff auf b.sso.com wird die Sitzungs-ID aus dem Cookie

entnommen und die Sitzung über die Sitzungs-ID aus einem Persistenzcontainer abgerufen.

Beim Besuch von a.sso.com wird beispielsweise die session_id im Cookie gespeichert. Beim Zugriff auf b.sso.com wird die Sitzungs-ID aus dem Cookie

entnommen und die Sitzung über die Sitzungs-ID aus einem Persistenzcontainer abgerufen.

In diesem Experiment wird PHP als experimentelle Sprache verwendet.

Beim Besuch von a.sso.com wird die Sitzungs-ID über

session_start();
 $_SESSION['person'] = "SBSBSBS";
 $session_id = session_id();
 setcookie('name',$session_id,time()+3600*24,'/','SSO.com');
Nach dem Login kopieren

im Cookie gespeichert Mitte.

Da die Sitzung ein Array in PHP ist, verfügt PHP über die Funktion serialize(), um das Array zu serialisieren.

$session_value = serialize($_SESSION);
Nach dem Login kopieren

Dann speichern $session_value in der Datenbank.

Beim Besuch von b.sso.com wird die Sitzungs-ID aus dem Cookie abgerufen, und dann wird die serialisierte Sitzung gemäß der Sitzungs-ID aus der Datenbank abgerufen.

Dann Sie kann die Sitzung betreiben, um die Sitzung domänenübergreifend zu realisieren.

Da das Speichern der Sitzung in der Datenbank ein zeitaufwändiger Vorgang ist, kann der Zugriff darauf in einem Cache wie Memcached oder Redis erfolgen.

Auf diese Weise , ist der Zugriff auf die Sitzung schneller.

Ein weiterer Vorteil der Verwendung des Caches besteht darin, dass die Sitzung normalerweise eine bestimmte Überlebenszeit hat. Wenn sie in der Datenbank vorhanden ist, muss die Überlebenszeit der Sitzung gespeichert werden Es muss beurteilt werden, ob es abgelaufen ist.

Durch die Verwendung des Caches zum Speichern von Sitzungen können Sie deren Überlebenszeit während der Speicherung festlegen und so den Prozess der Ungültigkeitsbeurteilung nach dem Abruf reduzieren.

Meine Lösung besteht darin, den folgenden Code am Eingang hinzuzufügen:

ini_set('session.cookie_path', '/');
 
 ini_set('session.cookie_domain', '.jb51.net'); //注意jb51.net换成你自己的域名
 
ini_set('session.cookie_lifetime', '1800');
Nach dem Login kopieren

Site 2

Drei Möglichkeiten, Sitzungen über Subdomänen hinweg in PHP zu implementieren

Sie können sehen, dass die PHPSESSID der beiden Sites identisch sind, was natürlich auch das Problem von Cross-Subdomain-Namen löst

Das Obige ist, wie man es realisiert Cross-Subdomains von Sitzungen in PHP. Mehrere Lösungen, ich hoffe, sie können allen Bedürftigen helfen.

Weitere verwandte Artikel zu den drei Implementierungsmethoden für sitzungsübergreifende Subdomänen in PHP finden Sie auf der chinesischen PHP-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 Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!