Quand je faisais des choses auparavant, la session était généralement stockée directement dans la base de données, afin qu'elle puisse résoudre le problème du cross-domain et pas seulement du cross-sous-domaine. Cependant, le problème que j'ai rencontré aujourd'hui était que je devais le faire. apporter des modifications aux choses existantes d'autres personnes. Comme il ne s'agissait que d'un sous-domaine, j'ai pensé qu'il devait y avoir une solution simple. Du Niang a trouvé trois solutions :
La session est principalement divisée en deux parties :
L'une est les données de session, ces données sont stockées par défaut dans le fichier tmp du serveur et existent sous forme de fichier.
L'autre est l'ID de session qui marque les données de session. L'ID de session est le nom du fichier de session. L'ID de session est généré de manière aléatoire, il peut donc garantir l'unicité et le caractère aléatoire et garantir le fonctionnement. sécurité de la séance. Généralement, si la durée de vie de la session n'est pas définie, l'ID de session est stocké dans la mémoire. Après la fermeture du navigateur, l'ID est automatiquement déconnecté. Après une nouvelle demande de page, un nouvel ID de session est enregistré. Si le client ne désactive pas les cookies, le cookie joue le rôle de stockage de l'ID de session et de la durée de vie de la session lors du démarrage de la session de session.
Deux sites Web de noms de domaine différents souhaitent utiliser la même session, ce qui implique des problèmes inter-domaines de session !
Par défaut, chaque serveur générera un SESSIONID pour le même client. Par exemple, pour le même navigateur utilisateur, l'ID de SESSION généré par le serveur A est 11111111111, tandis que l'ID de SESSION généré par le serveur B. est 222222. De plus, les données SESSION de PHP sont stockées séparément dans le système de fichiers de ce serveur. Si vous souhaitez partager des données de SESSION, vous devez atteindre deux objectifs :
Le premier est que l'ID de SESSION généré par chaque serveur pour le même client doit être le même et peut être transmis via le même COOKIE, c'est-à-dire qu'il est dit que chaque serveur doit être capable de lire le même COOKIE nommé PHPSESSID ;
L'autre est que la méthode/l'emplacement de stockage des données de SESSION doit garantir que chaque serveur peut y accéder. En termes simples, ces deux objectifs sont que plusieurs serveurs (serveurs A et B) partagent l'ID de SESSION du client et qu'ils doivent également partager les données de SESSION du serveur.
Il existe trois solutions :
1 Faites simplement ce qui suit au tout début de la page php (avant toute sortie, et avant session_start()) Set <.>
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.mydomain.com'); ini_set('session.cookie_lifetime', '1800');2. Définissez
session.cookie_path = / session.cookie_domain = .mydomain.com session.cookie_lifetime = 1800dans php.ini 3. Appelez la fonction
session_set_cookie_params(1800 , '/', '.mydomain.com');au tout début de la page php (les conditions sont les mêmes que 1) session a Session_id comme seul identifiant de la session .
session_start(); $_SESSION['person'] = "SBSBSBS"; $session_id = session_id(); setcookie('name',$session_id,time()+3600*24,'/','SSO.com');milieu.
$session_value = serialize($_SESSION);Puis enregistrez $session_value dans la base de données.
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.jb51.net'); //注意jb51.net换成你自己的域名 ini_set('session.cookie_lifetime', '1800');
Site 2
Vous pouvez voir que les PHPSESSID des deux sites sont les mêmes, ce qui bien sûr résout également le problème des noms de sous-domaines croisés
Ce qui précède explique comment réaliser cross-sous-domaines de sessions en PHP Plusieurs solutions, j'espère qu'elles pourront aider tous ceux qui en ont besoin.
Pour plus d'articles sur les trois méthodes d'implémentation de session multi-sous-domaines en PHP, veuillez faire attention au site Web PHP chinois !