Question

PHP stocke ses informations de session sur le système de fichiers de l'hôte du serveur établissant cette session. Dans un environnement PHP à plusieurs hôtes, où la charge est distribuée de manière inintelligente entre chaque hôte, les variables de session PHP ne sont pas disponibles pour chaque demande (sauf si la demande est assignée au même hôte - supposons que nous n’ayons aucun contrôle sur l’équilibreur de charge). .

Ce site, surnommé " Les auto-stoppeurs Le Guide de l’équilibrage de la charge PHP & ; suggère de remplacer le gestionnaire de session PHP et de stocker les informations de session dans la base de données partagée.

Quel est, à votre humble avis, le meilleur moyen de conserver les informations de session dans un environnement hôte PHP multiple?

MISE À JOUR: Merci pour ces bons commentaires. Pour ceux qui recherchent du code d'exemple, nous avons trouvé un tutoriel utile sur l’écriture d’une classe Session Manager pour MySQL que je recommande d’extraire.

Était-ce utile?

La solution

Base de données ou Base de données + Memcache. De manière générale, les sessions ne doivent pas être écrites trop souvent. Commencez avec une solution de base de données qui écrit uniquement sur la base de données lorsque les données de session ont été modifiées . Memcache devrait être ajouté ultérieurement à titre d'amélioration des performances. Une solution de base de données sera très rapide car vous ne recherchez que des clés primaires. Assurez-vous que la base de données est verrouillée par une ligne et non par une table (myISAM). MemCache est seulement une mauvaise idée ... S'il déborde, se bloque ou est redémarré, les utilisateurs seront déconnectés.

Autres conseils

Quoi que vous fassiez, ne le stockez pas sur le serveur lui-même (même si vous utilisez un seul serveur ou dans un scénario de basculement 1 + 1). Cela vous mettra dans une impasse.

Je dirais que, utilisez Database + Memcache pour le stockage / la récupération, cela vous gardera hors de la portée de Zend (et croyez-moi, les choses vont mal à un moment donné avec Zend). Comme vous pourrez facilement partitionner par UserID ou SessionID, même si vous utilisez MySQL, les choses seront assez évolutives.

(Edit: de plus, aller avec DB + Memcache ne vous lie pas à une fête commerciale, cela ne vous lie pas non plus à PHP - quelque chose pour lequel vous pourriez être heureux plus tard)

Le stockage des données de session dans une base de données partagée fonctionne, mais peut être lent. S'il s'agit d'un très gros site, memcache est probablement une meilleure option.

En fonction du budget de votre projet, vous pouvez également envisager Zend Platform pour vos machines de production, qui, en plus de nombreuses autres fonctionnalités intéressantes, comprend un cluster de sessions configurable, qui fonctionne un peu comme un CDN.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top