Heim Backend-Entwicklung PHP-Tutorial So lösen Sie das Problem der Sitzungskoexistenz zwischen Domänennamen unter Yii2

So lösen Sie das Problem der Sitzungskoexistenz zwischen Domänennamen unter Yii2

Jun 15, 2018 am 10:26 AM
session yii2 跨域

In diesem Artikel wird hauptsächlich die Lösung für die domänenübergreifende Koexistenz unter Yii2 vorgestellt. Der Inhalt ist ziemlich gut und wird als Referenz dienen.

Ich habe vorhin über sitzungsbezogene Konfigurationen gesprochen. Ich glaube, dass viele Entwicklungsfreunde darauf gestoßen sind eingeloggt, und die zugehörige Website ist ebenfalls eingeloggt. Es gibt zwei Situationen: eine zwischen 9streets.cn und a.9streets.cn und die andere zwischen a.com und b.com. Ich habe die Handhabungsmethoden in den letzten Tagen zusammengefasst.

Ob es sich um einen First- und Second-Level-Domainnamen oder eine Cross-Domain unter verschiedenen Domainnamen handelt, zwei Punkte müssen erreicht werden:

  • Die Der Client greift auf dieselbe Sitzungs-ID zu.

  • Der Speicherort der Sitzungsdaten, auf die von Servern zugegriffen wird, die allen Domänennamen entsprechen, muss konsistent sein.

1. Der Zugriff auf die gemeinsame Sitzungs-ID erfolgt hauptsächlich durch Schreiben der aktuellen Sitzungs-ID in das Cookie.

Auf Cookies kann nicht unter verschiedenen Domänennamen zugegriffen werden. Wir benötigen beim Zugriff und indem Sie festlegen, dass sich der Benutzer im Hintergrund anmeldet, legen Sie den Domänennamen fest, für den die Anmeldeinformationen freigegeben werden müssen. Wenn es sich um einen 1- oder 2-stufigen Domänennamen handelt, setzen Sie das Cookie direkt auf den Hauptdomänennamen, zum Beispiel:

setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
Nach dem Login kopieren

Vielleicht fragen Sie sich: Was ist, wenn sie unterschiedliche Domainnamen haben? Es handelt sich um eine einfache Lösung mit P3P-Technologie. Das Implementierungsprinzip besteht darin, dass das y.com-Programm beim Zugriff auf die Website x.com die y.com-Datei zum Schreiben des Session-ID-Werts auslöst, der Session-ID-Wert abgerufen werden kann und dann die Seesion Der Wert wird in der Datenbank gespeichert und der Wert der Sitzungs-ID ist ausreichend. Dies erfordert, dass die Programmdateien in y.com domänenübergreifend zugänglich sein müssen. Standardmäßig können Browser keine domänenübergreifenden Cookies setzen. Sie müssen den p3p-Header hinzufügen. Zur entsprechenden PHP-Datei hinzufügen: header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

2. Die Implementierungsmethode des konsistenten Speicherorts von Sitzungsdaten

Die Sitzungsdaten werden in der tmp-Datei des Servers gespeichert Standardmäßig liegt es in Form einer Datei vor, anstatt im Speicher des Servers gespeichert zu werden. Hier müssen wir es so ändern, dass es in allen Domänen zugänglich ist. Datenbankspeicherung, Dateispeicherung und Speicherspeicherung werden online eingeführt. Wenn eine Datenbank zum Speichern von Sitzungsdaten verwendet wird und die Website eine große Anzahl von Besuchen hat, wird das Lesen und Schreiben von SESSION häufig auf der Datenbank ausgeführt, und die Effizienz wird erhöht Sie können das Vorhandensein von Speicher erheblich reduzieren. Die folgende Sitzung.rar stellt ein Beispiel für die Dateninventursitzung vor.

Um dieses Problem unter yii2 zu lösen, lautet die erfolgreiche Konfiguration gemäß den im Internet gefundenen Tutorials wie folgt:

Konfigurieren Sie in main.php im Konfigurationsordner des Frontends

$host = explode('.', $_SERVER["HTTP_HOST"]);
if (count($host) > 2) {
  define('DOMAIN', $host[1] . '.' . $host[2]);
} else {
  define('DOMAIN', $host[0] . '.' . $host[1]);
}
define('DOMAIN_HOME', 'www.' . DOMAIN);
define('DOMAIN_USER_CENTER', 'man.' . DOMAIN);
define('DOMAIN_API', 'api.' . DOMAIN);
define('DOMAIN_EMAIL', 'mail.' . DOMAIN);
define('DOMAIN_LOGIN', 'login.' . DOMAIN);
define('DOMAIN_IMG', 'img.' . DOMAIN);
Nach dem Login kopieren

Dann konfigurieren Sie Benutzer und Sitzung:

'user' => [
  'enableAutoLogin' => true,
  'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN],
],
'session' => [
  'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0],
  'timeout' => 3600,
],
Nach dem Login kopieren

Dies ist im Benutzer und in der Sitzung Ich habe die Domain des Konfigurationselements aufgeschrieben, zum Beispiel: 'domain'=>'.baidu.com', sodass keine Beurteilung erforderlich ist

Das Obige ist der gesamte Inhalt Ich hoffe, dass dieser Artikel für alle hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Probleme im Zusammenhang mit der Verwendung von JQuery im Yii-Framework

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Sitzungskoexistenz zwischen Domänennamen unter Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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

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,

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

Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Sep 02, 2023 pm 12:29 PM

JavaScript-Cookies Die Verwendung von JavaScript-Cookies ist die effektivste Möglichkeit, Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen. Informationen, die für ein besseres Besuchererlebnis oder Website-Statistiken benötigt werden. PHPCookieCookies sind Textdateien, die auf Client-Computern gespeichert und zu Nachverfolgungszwecken aufbewahrt werden. PHP unterstützt transparent HTTP-Cookies. Wie funktionieren JavaScript-Cookies? Ihr Server sendet einige Daten in Form eines Cookies an den Browser Ihres Besuchers. Browser können Cookies akzeptieren. Falls vorhanden, wird es als reiner Textdatensatz auf der Festplatte des Besuchers gespeichert. Wenn ein Besucher nun eine andere Seite der Website erreicht

Wie stelle ich domänenübergreifende Anfragen in Vue? Wie stelle ich domänenübergreifende Anfragen in Vue? Jun 10, 2023 pm 10:30 PM

Vue ist ein beliebtes JavaScript-Framework zum Erstellen moderner Webanwendungen. Bei der Entwicklung von Anwendungen mit Vue müssen Sie häufig mit verschiedenen APIs interagieren, die sich oft auf verschiedenen Servern befinden. Wenn eine Vue-Anwendung auf einem Domänennamen ausgeführt wird, kann sie aufgrund von domänenübergreifenden Sicherheitsrichtlinienbeschränkungen nicht direkt mit der API auf einem anderen Domänennamen kommunizieren. In diesem Artikel werden verschiedene Methoden für domänenübergreifende Anfragen in Vue vorgestellt. 1. Verwenden Sie einen Proxy. Eine gängige domänenübergreifende Lösung ist die Verwendung eines Proxys

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.

See all articles