Maison >développement back-end >tutoriel php >Comment résoudre le problème de la coexistence des sessions entre les noms de domaine sous Yii2
Cet article présente principalement la solution pour la coexistence de sessions inter-domaines sous Yii2. Le contenu est assez bon, je vais le partager avec vous maintenant et le donner comme référence.
J'ai parlé plus tôt des configurations liées à la session. Pendant le développement, le module de connexion qui doit souvent être partagé entre les domaines est le module de connexion. Je pense que de nombreux amis développeurs l'ont rencontré. Vous n'avez besoin que d'un seul endroit pour vous connecter. dans, et le site Web associé est également connecté. 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 gestion 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 domaine, deux points doivent être atteints :
Le le client accède au même sessionId,
L'emplacement des données de session accédées par les serveurs correspondant à tous les noms de domaine doit être cohérent.
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 des noms de domaine différents, nous en avons besoin lors de l'accès. et en configurant l'utilisateur pour qu'il se connecte en arrière-plan, définissez le nom de domaine qui doit être partagé avec les informations de connexion. S'il s'agit d'un nom de domaine à 1 ou 2 niveaux, 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");Peut-être vous demanderez-vous : et s'ils se trouvent dans des noms de domaine différents ? 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 Web x.com, le programme y.com déclenche l'écriture de la valeur sessionid dans le fichier y.com, la valeur sessionid peut être obtenue, puis la session. La valeur est stockée dans la base de données, et la même 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 au fichier php correspondant :
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
$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);Puis configurez l'utilisateur et la session :
'user' => [ 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN], ], 'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],Voici le élément de configuration Dans l'utilisateur et la session, j'ai noté le domaine, par exemple : 'domain'=>'.baidu.com', afin qu'il n'y ait pas besoin de juger
Problèmes liés à l'utilisation de jquery dans le framework Yii
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!