Mysql
 sql >> Base de données >  >> RDS >> Mysql

Variables de session :quelle quantité de données représente trop ?

Premièrement, les sessions PHP ne sont pas stockées en mémoire par défaut , ils sont stockés sur le disque, donc chaque bloc/session dans lequel vous écrivez va occuper de l'espace disque et non de la mémoire (jusqu'à ce que vous utilisiez PHP pour lire les données de session).

Oui, vous êtes potentiellement plus efficace, mais pas si vous souhaitez évoluer. Voici pourquoi :


Stocker des données dans des sessions

Il est parfaitement acceptable d'en stocker quelques données dans les sessions. Théoriquement, il n'y a pas de limite (même si je n'ai jamais essayé de la casser ou même de la pousser, il suffit de passer à une solution plus efficace). Vous serez cependant limité par l'espace disque et PHP memory_limit() .

Souvent, les données stockées dans les sessions incluent des éléments tels que :

  • Noms d'utilisateur
  • Hachages
  • Dates d'inscription
  • Autres variables (identifiants de groupe d'utilisateurs/clés, etc.)
  • Messages flash
  • (PAS les mots de passe !)

Cependant, il y a un compromis. Si votre trafic (et votre utilisation) augmente et que vous stockez beaucoup de données dans $_SESSION , vous commencerez très probablement à voir des problèmes, à la fois en termes d'utilisation du disque et de la mémoire.

Je ne pense pas qu'il y ait de problème avec ce que vous suggérez, mais au-delà des éléments que vous avez énumérés et où les exemples ci-dessus se chevauchent, il faut faire attention.

Si vous souhaitez mettre à l'échelle (horizontalement) et conserver les sessions sur disque, vous avez plusieurs options ( sessions collantes ou réseau de stockage sont un couple) car le disque sur un serveur ne stocke pas les mêmes sessions qu'un disque sur un autre serveur.


Emplacement des données de session

Vous pouvez trouver l'emplacement où PHP stocke les données de session en appelant : session_save_path()

ou sur la CLI :

php -r 'echo session_save_path(), "\n";'

Vous n'avez pas mentionné votre système d'exploitation, mais les emplacements communs pour les fichiers de session (sur différents types de système d'exploitation) sont :

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Les sessions stockées sur le disque ont généralement des noms de fichiers qui ressemblent à ceci en utilisant ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Il convient de noter qu'il existe souvent des processus de récupération de place qui nettoient les sessions mortes après des périodes spécifiques. Cela varie selon le système d'exploitation, mais ils sont généralement présents avec diverses installations basées sur LAMP.


Autres options/approches de stockage de session

Dans votre base de données
Les données de session sont souvent stockées dans une base de données plutôt que sur un disque local et cela fonctionne bien pour les sites micro, petits et (selon la façon dont c'est fait) moyens avec un niveau de trafic raisonnable.

Comme toute autre solution, elle a ses avantages et ses inconvénients (comme pouvoir bannir/expulser un utilisateur en exécutant une requête plutôt que de supprimer un fichier de session de /tmp )

En mémoire
pour les sites plus grands (trafic plus élevé) et en particulier là où le volume d'utilisateurs simultanés est élevé, la mémoire est plus rapide à lire/écrire pour les variables ou données très fréquemment consultées au lieu d'ajouter une charge excessive à votre base de données. Il peut et doit toujours être écrit dans la base de données (voir cache d'écriture ), mais également conservé en mémoire pour un accès efficace.

Une technique particulièrement intéressante est la mise en cache de la mémoire . Un exemple de solution open source compatible PHP largement utilisé est Memcached , qui peut être utilisé sur un ou plusieurs serveurs [distribués]. J'ai vu cela utilisé par de petites et grandes entreprises et il suffit de regarder qui l'utilise/contribue...