Maison php教程 PHP开发 Comment utiliser Memcache pour partager des données de session dans thinkPHP avec plusieurs noms de domaine

Comment utiliser Memcache pour partager des données de session dans thinkPHP avec plusieurs noms de domaine

Dec 22, 2016 am 10:13 AM
session

L'exemple de cet article décrit la méthode d'implémentation d'utilisation de Memcache pour partager des données de session dans thinkPHP avec plusieurs noms de domaine. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Origine du problème

Les sites Web légèrement plus grands ont généralement plusieurs serveurs, chaque serveur exécute des modules avec des fonctions différentes, utilisez différents noms de domaine de deuxième niveau, mais pour un site Web hautement intégré, le système utilisateur est unifié, c'est-à-dire qu'un ensemble de noms d'utilisateur et de mots de passe peuvent être connectés et utilisés dans chaque module de l'ensemble du site Web. Il est relativement simple pour chaque serveur de partager les données utilisateur. Il vous suffit de mettre un serveur de base de données en back-end, et chaque serveur peut accéder aux données utilisateur via une interface unifiée. Mais il y a toujours un problème, c'est-à-dire qu'une fois que l'utilisateur s'est connecté à ce serveur, lorsqu'il accède à d'autres modules d'un autre serveur, il doit toujours se reconnecter. Il s'agit d'une connexion unique et tous les problèmes courants sont mappés. technologie. En fait, c'est entre différents serveurs. Comment partager les données de SESSION.

2. Le principe de fonctionnement de PHP SESSION

Avant de résoudre le problème, comprenons d'abord le principe de fonctionnement de PHP SESSION. Lorsque le client (comme un navigateur) se connecte au site Web, la page PHP visitée peut utiliser session_start() pour ouvrir la SESSION, ce qui générera l'identification unique du client SESSION ID (cet ID peut être obtenu/défini via la fonction session_id ()). L'ID de SESSION peut être conservé sur le client de deux manières, de sorte que lors de la requête de différentes pages, le programme PHP puisse apprendre l'ID de SESSION du client ; l'une consiste à ajouter automatiquement l'ID de SESSION à l'URL GET, ou au formulaire POST, par défaut ; . Ci-dessous, le nom de la variable est PHPSESSID ; l'autre consiste à enregistrer l'ID de SESSION dans le COOKIE via COOKIE. Par défaut, le nom de ce COOKIE est PHPSESSID. Ici, nous utilisons principalement la méthode COOKIE à des fins d’explication, car elle est largement utilisée.

Alors, où sont stockées les données de SESSION ? Côté serveur bien sûr, mais au lieu d'être sauvegardé en mémoire, il est sauvegardé dans un fichier ou une base de données. Par défaut, la méthode de sauvegarde SESSION définie dans php.ini est celle des fichiers (session.save_handler = files), c'est-à-dire que les données SESSION sont enregistrées en lisant et en écrivant des fichiers, et le répertoire dans lequel le fichier SESSION est enregistré est spécifié par session. save_path, et le nom du fichier commence par sess _ est le préfixe, suivi de SESSIONID, tel que : sess_c72665af28a8b14c0fe11afe3b59b51b. Les données du fichier sont les données SESSION après sérialisation. Si le nombre d'accès est important, davantage de fichiers SESSION peuvent être générés. Dans ce cas, vous pouvez configurer un répertoire hiérarchique pour enregistrer les fichiers SESSION, ce qui améliorera considérablement l'efficacité. La méthode de configuration est : session.save_path=". N;/save_path", N est hiérarchique. niveau, save_path est le répertoire de départ. Lors de l'écriture des données SESSION, PHP obtiendra le SESSION_ID du client, puis utilisera cet ID SESSION pour trouver le fichier SESSION correspondant dans le répertoire de stockage du fichier SESSION spécifié. S'il n'existe pas, créez-le, puis sérialisez les données et écrivez-les. le fichier . La lecture des données SESSION est un processus opérationnel similaire. Les données lues doivent être désérialisées et la variable SESSION correspondante est générée.

3. Les principaux obstacles et solutions au partage multi-serveur SESSION

En comprenant le principe de fonctionnement de SESSION, nous pouvons constater que par défaut, chaque serveur partagera le même client SESSIONID. Par exemple, pour le même navigateur utilisateur, l'ID de SESSION généré par le serveur A est 30de1e9de3192ba6ce2992d27a1b6a0a, tandis que l'ID de SESSION généré par le serveur B est c72665af28a8b14c0fe11afe3b59b51b. De plus, les données SESSION de PHP sont stockées séparément dans le système de fichiers de ce serveur.

Après avoir identifié le problème, vous pouvez commencer à le résoudre. 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 puisse être transmis via le même COOKIE, ce qui signifie que chaque serveur doit pouvoir lire le même ID de SESSION. Le COOKIE nommé PHPSESSID ; l'autre est la méthode/emplacement de stockage des données de SESSION qui doivent être accessibles à tous les serveurs. En termes simples, plusieurs serveurs partagent l'ID SESSION du client et doivent également partager les données SESSION du serveur.

La réalisation du premier objectif est en fait très simple. Il vous suffit de définir spécialement le domaine de COOKIE. Par défaut, le domaine de COOKIE est le nom de domaine/l'adresse IP du serveur actuel, et le domaine. S'ils sont différents, les COOKIE définis par chaque serveur ne peuvent pas accéder les uns aux autres. Par exemple, le serveur de www.aaa.com ne peut pas lire et écrire le COOKIE défini par le serveur de www.bbb.com. Les serveurs du même site dont nous parlons ici ont leur propre particularité, c'est-à-dire qu'ils appartiennent au même domaine de premier niveau. Par exemple : tieba.xiaoyuan.com et www.xiaoyuan.com appartiennent tous deux au domaine .xiaoyuan. .com, nous pouvons alors définir le domaine du COOKIE sur .xiaoyuan.com, afin que tieba.xiaoyuan.com, www.xiaoyuan.com, etc. puissent accéder à ce COOKIE. La méthode de paramétrage dans le code PHP est la suivante :

<?php
ini_set(&#39;session.cookie_domain&#39;, &#39;.xiaoyuan.com&#39;);
?>
Copier après la connexion

De cette façon, l'objectif de chaque serveur partageant le même ID de SESSION client est atteint.

Le deuxième objectif peut être atteint en utilisant le partage de fichiers. Il existe deux façons de le résoudre, l'une consiste à utiliser une session de stockage de données et l'autre est d'essayer Memcache. Utilisez MEMCACHE pour le résoudre ici.

J'utilise le framework thinkphp, qui prend déjà en charge l'accès memcache aux sessions. Après avoir configuré le serveur memcache, il vous suffit de définir l'IP et le port de memcache dans le fichier de configuration, puis de spécifier le paramètre COOKIE_DOMAIN. appuyez sur Fonctionner de la manière normale de faire fonctionner la session. À l'heure actuelle, la session peut être partagée par plusieurs noms de domaine

J'espère que cet article sera utile à la programmation PHP de chacun basée sur le framework ThinkPHP.

Pour plus de méthodes d'implémentation thinkPHP d'utilisation de memcache pour partager des données de session sous plusieurs noms de domaine, veuillez faire attention au site Web PHP chinois !

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment définir le délai d'expiration de la session dans SpringBoot Session Comment définir le délai d'expiration de la session dans SpringBoot Session May 15, 2023 pm 02:37 PM

Le problème a été détecté dans le délai d'expiration de la session de production du projet Springboot. Le problème est décrit ci-dessous : Dans l'environnement de test, la sortie de session a été configurée en modifiant le fichier application.yaml après avoir défini différentes heures pour vérifier la configuration de la sortie de session. est entré en vigueur, le délai d'expiration a été directement fixé à 8 heures pour la sortie. Arrivé en environnement de production. Cependant, j'ai reçu à midi des commentaires de clients indiquant que le délai d'expiration du projet était court. Si aucune opération n'est effectuée pendant une demi-heure, la session expirera et nécessitera des connexions répétées. Résolvez le problème de la gestion de l'environnement de développement : le projet Springboot intègre Tomcat, donc la sortie de session configurée dans application.yaml dans le projet est efficace. Environnement de production : la version de l'environnement de production est

Comment résoudre l'échec de la session Comment résoudre l'échec de la session Oct 18, 2023 pm 05:19 PM

L'échec de la session est généralement dû à l'expiration de la durée de vie de la session ou à l'arrêt du serveur. Les solutions : 1. Prolonger la durée de vie de la session ; 2. Utiliser le stockage persistant ; 3. Utiliser les cookies ; 4. Mettre à jour la session de manière asynchrone ; 5. Utiliser un middleware de gestion de session ;

Solution au problème inter-domaines de session PHP Solution au problème inter-domaines de session PHP Oct 12, 2023 pm 03:00 PM

Solution au problème inter-domaines de PHPSession Dans le développement de la séparation front-end et back-end, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines. 1. L'utilisation la plus courante des cookies pour partager des sessions entre domaines

Que dois-je faire si la session php disparaît après l'actualisation ? Que dois-je faire si la session php disparaît après l'actualisation ? Jan 18, 2023 pm 01:39 PM

Solution au problème de disparition de la session php après l'actualisation : 1. Ouvrez la session via "session_start();" ; 2. Écrivez toutes les configurations publiques dans un fichier php ; 3. Le nom de la variable ne peut pas être le même que l'indice du tableau ; 4. Dans Vérifiez simplement le chemin de stockage des données de session dans phpinfo et vérifiez si la session dans le répertoire de fichiers est enregistrée avec succès.

Quel est le délai d'expiration par défaut de la session PHP ? Quel est le délai d'expiration par défaut de la session PHP ? Nov 01, 2022 am 09:14 AM

Le délai d'expiration par défaut de la session PHP est de 1440 secondes, soit 24 minutes, ce qui signifie que si le client ne s'actualise pas pendant plus de 24 minutes, la session en cours expirera si l'utilisateur ferme le navigateur, la session se terminera et la session PHP expirera. La session n'existera plus.

Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide May 22, 2023 pm 01:49 PM

Problème : Aujourd'hui, nous avons rencontré un problème de délai d'expiration dans notre projet et les modifications apportées au fichier application.properties de SpringBoot2 n'ont jamais pris effet. Solution : Les propriétés server.* sont utilisées pour contrôler le conteneur intégré utilisé par SpringBoot. SpringBoot créera une instance du conteneur de servlet en utilisant l'une des instances ServletWebServerFactory. Ces classes utilisent les propriétés server.* pour configurer le conteneur de servlets contrôlé (tomcat, jetty, etc.). Lorsque l'application est déployée en tant que fichier war sur une instance Tomcat, les propriétés server.* ne s'appliquent pas. Ils ne s'appliquent pas,

Comment implémenter la connexion SMS dans l'application de session partagée Redis Comment implémenter la connexion SMS dans l'application de session partagée Redis Jun 03, 2023 pm 03:11 PM

1. Implémentation de la connexion SMS basée sur la session 1.1 Organigramme de connexion SMS 1.2 Implémentation de l'envoi du code de vérification SMS Description de la demande frontale : Description de la méthode de demande Chemin de requête POST/utilisateur/code paramètre de demande téléphone (numéro de téléphone) valeur de retour Aucune interface back-end implémentation : @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Vérifiez le numéro de téléphone mobile si.

Quelles sont les différences entre les cookies JavaScript et PHP ? Quelles sont les différences entre les cookies JavaScript et PHP ? Sep 02, 2023 pm 12:29 PM

Cookies JavaScript L'utilisation de cookies JavaScript constitue le moyen le plus efficace de mémoriser et de suivre les préférences, les achats, les commissions et autres informations. Informations nécessaires pour une meilleure expérience de visiteur ou des statistiques de site Web. PHPCookieCookies sont des fichiers texte stockés sur les ordinateurs clients et conservés à des fins de suivi. PHP prend en charge de manière transparente les cookies HTTP. Comment fonctionnent les cookies JavaScript ? Votre serveur envoie certaines données au navigateur de votre visiteur sous la forme d'un cookie. Les navigateurs peuvent accepter les cookies. S'il est présent, il sera stocké sur le disque dur du visiteur sous forme d'enregistrement en texte brut. Désormais, lorsqu'un visiteur atteint une autre page du site

See all articles