Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung für die domänenübergreifende Koexistenz von Sitzungen unter Yii2

Lösung für die domänenübergreifende Koexistenz von Sitzungen unter Yii2

高洛峰
高洛峰Original
2017-02-06 16:57:351381Durchsuche

Ich habe vorhin über sitzungsbezogene Konfigurationen gesprochen. Ich glaube, dass viele Entwicklungsfreunde darauf gestoßen sind. Sie benötigen nur einen Ort, um sich anzumelden, und zwar die zugehörige Website auch im Login-Status. 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.

Unabhängig davon, ob es sich um einen Domänennamen der ersten und zweiten Ebene oder um eine Domänenübergreifende Verbindung unter verschiedenen Domänennamen handelt, müssen zwei Punkte erreicht werden:

Der Client greift auf dieselbe Sitzungs-ID zu,

Der Standort 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 Legen Sie beim Anmelden den Domänennamen fest, für den die Anmeldeinformationen freigegeben werden müssen. Wenn er sich unter dem Domänennamen der 1. oder 2. Ebene befindet, setzen Sie das Cookie direkt auf den Hauptdomänennamen, zum Beispiel:

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

Vielleicht fragen Sie sich: Was ist, wenn es sich um einen anderen Domainnamen handelt? 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, den Session-ID-Wert abrufen 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. 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.Sitzungsdatenspeicherort Konsistente Implementierungsmethode

Sitzungsdaten werden standardmäßig in der tmp-Datei des Servers gespeichert. Sie liegen in Form einer Datei vor, anstatt im Speicher des Servers gespeichert zu werden. Hier müssen wir sie auf „Von allen Domänen aus zugänglich“ ändern. 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);

Dann Benutzer und Sitzung konfigurieren:

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

Hier habe ich die Domäne im Benutzer und in der Sitzung der Konfigurationselemente notiert . Zum Beispiel: 'domain'=>'.baidu.com', es besteht also kein Grund zur Beurteilung.

Ich hoffe, dass es hilfreich ist Ich hoffe auch, dass jeder die chinesische Website unterstützt.

Weitere Artikel zu Lösungen für die domänenübergreifende Koexistenz von Sitzungen unter Yii2 finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
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