Maison > développement back-end > tutoriel php > PHP implémente le partage de SESSION multi-serveurs

PHP implémente le partage de SESSION multi-serveurs

不言
Libérer: 2023-03-24 14:58:02
original
1894 Les gens l'ont consulté

Le contenu de cet article concerne la réalisation par PHP du partage de SESSION multi-serveur. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

PHP réalise une SESSION multi-serveur. partage

Pourquoi le partage de session est nécessaire


De nos jours, les sites Web légèrement plus grands ont essentiellement plusieurs sous-domaines, tels que www.feiniu.com, search.feiniu.com , member.feiniu.com, si ces sites Web doivent partager les informations de connexion des utilisateurs, ils doivent bien sûr partager des sessions, le principe est qu'ils ont le même domaine principal.

Principe de la session PHP

Le client accède à la page php, exécute session_start et génère le session_id Généralement, nous stockons le session_id sur le cookie, et le contenu de la session est enregistré sur le serveur. L'accès client est différent. Toutes les pages transmettront le session_id au serveur et obtiendront le contenu de la session via le session_id.

Le processus est comme ceci, mais différents serveurs généreront des session_ids différents pour le même client, donc différents serveurs ne peuvent pas obtenir le même contenu de session. De plus, les données SESSION par défaut de PHP sont stockées séparément dans le système de fichiers de ce serveur.

Donc, si nous voulons résoudre le partage de session, nous devons résoudre deux problèmes :

1. Plusieurs serveurs utilisent le même session_id

.
这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以了
打开PHP.ini, 设置session.cookie_domain = .feiniu.com, 
当然也可以在php代码当中设置ini_set("session.cookie_domain","feiniu.com");
Copier après la connexion
  • 1

  • 2

  • 3

  • 4

2. Plusieurs serveurs utilisent le même session_id pour accéder au même contenu de session

要实现这点,就必须把session内容存储到让所有服务器都能访问到的地方,php的session内容是默认存储到本服务器的文件中的,一般的解决方案是存入数据库,memcache或者redis这种缓存服务器,当然用默认的文件存储方式也可以,用NFS统一存储。

如何修改session存储引擎,参考这篇文章:http://blog.csdn.net/yagas/article/details/7593415
Copier après la connexion
  • 1.

  • 2

  • 3

  • 4

3. Comment choisir un moteur de stockage

  • Stockage de fichiers par défaut : la destruction de session de cette manière repose sur le garbage collector PHP, ce qui entraînera une concurrence élevée ou temps de destruction long. S'il est long, un grand nombre de fichiers seront générés dans le répertoire SESSION. Bien entendu, vous pouvez configurer un répertoire hiérarchique pour enregistrer les fichiers SESSION. Cela entraînera deux problèmes : premièrement, la recherche de fichiers est lente ; deuxièmement, le nombre de fichiers pouvant être hébergés dans chaque répertoire est limité, ce qui peut entraîner l'échec du stockage de la nouvelle SESSION.

  • Stockage de la base de données : le stockage de la session dans la base de données peut empêcher la suppression des données de session par le ramasse-miettes, et peut solidifier et stocker les données de session. Cependant, l'utilisation d'une base de données pour synchroniser les sessions augmentera les E/S de la base de données et augmentera la charge sur la base de données. De plus, la vitesse de lecture et d'écriture de la base de données est lente, ce qui ne favorise pas une synchronisation rapide des sessions.

  • stockage memcache :

    • La synchronisation des sessions de cette manière n'augmentera pas la charge sur la base de données, et la sécurité est relativement élevé. Mettre la session en mémoire est beaucoup plus rapide que lire à partir du fichier.

    • Mais Memcache divise la mémoire en blocs de stockage de nombreuses spécifications. Chaque bloc a une taille. Cette méthode détermine que Memcache ne peut pas utiliser pleinement la mémoire et produira une fragmentation de la mémoire en cas de blocs de stockage insuffisants. peut provoquer un débordement de mémoire

    • Pour les applications qui ne nécessitent pas de "distribution", ne nécessitent pas de partage, ou sont simplement suffisamment petites pour n'avoir qu'un seul serveur, memcached n'apportera aucun avantage, au contraire, cela ralentira. l’efficacité du système. Parce que les connexions réseau nécessitent également des ressources.

  • Stockage Redis : Par rapport à Memcache, l'accès Redis est légèrement plus lent. L'avantage est :

    • . Redis prend en charge de nombreuses structures de données et peut stocker des tableaux ou des objets, tandis que Memcache ne peut stocker que des chaînes

    • Lorsque la machine de session est redémarrée, tous les utilisateurs de Memcache doivent retrouver la session, et Redis ne le fera pas.

    • Lorsqu'un grand nombre d'utilisateurs entrent soudainement et génèrent beaucoup de données, ce qui remplit la mémoire de la machine stockant la session, Memcache se mettra en grève et toutes les touches ne fonctionneront pas. expire. Il continue simplement d'écraser les dernières données écrites, et redis ne fera que ralentir et n'affectera pas la logique du programme

    Recommandations associées :

    Implémentation PHP Méthode de partage NFS pour le partage de session multi-serveur_Tutoriel PHP

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!

É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