Solution pour la coexistence de noms de domaines entre sessions sous Yii2

高洛峰
Libérer: 2023-03-05 13:26:02
original
1380 Les gens l'ont consulté

J'ai parlé plus tôt des configurations liées aux sessions. Pendant le développement, le module de connexion est souvent nécessaire pour partager des sessions entre domaines. Je pense que de nombreux amis développeurs ont rencontré ce problème. Vous n'avez besoin que d'un seul endroit pour vous connecter, et le site Web associé est. également en statut de connexion. Il y a deux situations : l'une se situe entre 9streets.cn et a.9streets.cn, et l'autre se situe entre a.com et b.com. J'ai résumé les méthodes de traitement ces derniers jours.

Qu'il s'agisse d'un nom de domaine de premier et deuxième niveaux, ou de cross-domain sous différents noms de domaines, deux points doivent être atteints :

Le client accède au même sessionId,

La localisation des données de session accessibles par les serveurs correspondant à tous les noms de domaine doit être cohérente.

1. L'accès à l'ID de session commun se fait principalement en écrivant l'ID de session actuel dans le cookie.

Les cookies ne sont pas accessibles sous différents noms de domaine. Nous devons définir l'utilisateur en arrière-plan. l'accès Lors de la connexion, définissez le nom de domaine qui doit être partagé. S'il se trouve sous le nom de domaine de 1er ou 2ème niveau, définissez directement le cookie sur le nom de domaine principal, par exemple :

setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
Copier après la connexion
<. 🎜>

Peut-être vous demanderez-vous : et si c'est sur un nom de domaine différent ? Il s'agit d'une solution simple utilisant la technologie P3P. Le principe de mise en œuvre est que lors de l'accès au site x.com, le programme y.com déclenche l'écriture de la valeur sessionid dans le fichier y.com, puis peut obtenir la valeur sessionid. la valeur de session est stockée dans la base de données et la même valeur est obtenue. La valeur sessionid est suffisante. Cela nécessite que les fichiers du programme dans y.com soient accessibles sur tous les domaines. Par défaut, les navigateurs ne peuvent pas définir de cookies sur tous les domaines. Vous devez ajouter l'en-tête p3p. Ajouter : header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

2.emplacement de stockage des données de session Méthode de mise en œuvre cohérente


Les données de session sont stockées par défaut dans le fichier tmp du serveur. Elles existent sous la forme d'un fichier au lieu d'être stockées dans la mémoire du serveur. Il faut ici les modifier pour Accessible depuis tous les domaines. Le stockage de base de données, le stockage de fichiers et le stockage de mémoire sont introduits en ligne. Si une base de données est utilisée pour stocker les données de session et que le site Web compte un grand nombre de visites, la lecture et l'écriture de SESSION fonctionneront fréquemment sur la base de données et l'efficacité sera réduite. considérablement réduit. Vous pouvez considérer la présence de mémoire. Le serveur est implémenté. Le fichier session.rar suivant présente un exemple de session d'inventaire des données.

Pour traiter ce problème sous yii2, la configuration réussie selon les tutoriels trouvés sur Internet est la suivante :


Configurer dans main.php dans le dossier config du frontend

$host = explode(&#39;.&#39;, $_SERVER["HTTP_HOST"]);
if (count($host) > 2) {
  define(&#39;DOMAIN&#39;, $host[1] . &#39;.&#39; . $host[2]);
} else {
  define(&#39;DOMAIN&#39;, $host[0] . &#39;.&#39; . $host[1]);
}
define(&#39;DOMAIN_HOME&#39;, &#39;www.&#39; . DOMAIN);
define(&#39;DOMAIN_USER_CENTER&#39;, &#39;man.&#39; . DOMAIN);
define(&#39;DOMAIN_API&#39;, &#39;api.&#39; . DOMAIN);
define(&#39;DOMAIN_EMAIL&#39;, &#39;mail.&#39; . DOMAIN);
define(&#39;DOMAIN_LOGIN&#39;, &#39;login.&#39; . DOMAIN);
define(&#39;DOMAIN_IMG&#39;, &#39;img.&#39; . DOMAIN);
Copier après la connexion

Ensuite, configurez l'utilisateur et la session :

&#39;user&#39; => [
  &#39;enableAutoLogin&#39; => true,
  &#39;identityCookie&#39; => [&#39;name&#39; => &#39;_identity&#39;, &#39;httpOnly&#39; => true, &#39;domain&#39; => &#39;.&#39; . DOMAIN],
],
&#39;session&#39; => [
  &#39;cookieParams&#39; => [&#39;domain&#39; => &#39;.&#39; . DOMAIN, &#39;lifetime&#39; => 0],
  &#39;timeout&#39; => 3600,
],
Copier après la connexion

Ici, j'ai noté le domaine dans l'utilisateur et la session des éléments de configuration . Par exemple : 'domain'=>'.baidu.com', il n'est donc pas nécessaire de juger


Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile. à l'étude de tout le monde. J'espère également que tout le monde soutiendra le site Web chinois.

Pour plus d'articles liés aux solutions de coexistence de sessions entre domaines sous Yii2, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!