web-dev-qa-db-fra.com

Y a-t-il des limites pour les variables de session?

Comme le titre l'indique, y a-t-il des limites (le cas échéant) pour les variables de session ou elles sont considérées comme des variables habituelles et peuvent stocker une quantité égale de données?

Je cherche s'il y a d'autres limites en dehors de celles de type variable comme la longueur max, les valeurs max et ainsi de suite.

P.S. Si la question n'est pas claire, faites-le moi savoir.

Merci d'avance!

54
jolt

Comme l'a dit @Thariama, il n'y a pas de limite au nombre de variables; De plus, il n'y a pas de limite sur la quantité de données que vous pouvez stocker dans une session (j'ai vu des sessions de dizaines de Mo).

Au fur et à mesure que la taille d'une session augmente, vous rencontrerez différentes bizarreries: PHP 5 désérialise toute la session en mémoire à session_start() (en utilisant le gestionnaire de session par défaut - vous pouvez faire votre propre solution , bien sûr); avec une session de 20 Mo et 50 utilisateurs simultanés, vos scripts commencent à être sévèrement limités par les vitesses d'accès au disque (aka "le démarrage du script est lent comme la mélasse" - les sessions seules monopoliseraient un Go de RAM); à la fin, nous avons dédié une boîte pour garder autant de sessions que possible dans sa RAM, et les boîtes frontales y ont accédé via NFS (bien que cela nous ait aidé dans notre cas, cela peut être exagéré pour vous).

Notez que pour de nombreux utilisateurs simultanés et le stockage de session sur disque, le nombre de fichiers temporaires de session peut provoquer des problèmes avec les limites du système de fichiers (par exemple, combien de fichiers peuvent être dans un répertoire avant de rencontrer des problèmes avec stat()performance ), ou d'autres limites (nous avons trouvé une fois la difficulté qu'une boîte a été configurée pour n'autoriser que 4096 fichiers ouverts en même temps). Rien de tout cela n'est vraiment spécifique à la session, mais peut être déclenché par la gestion de la session.

53
Piskvor

Non, il n'y a pas de limite sur l'espace qu'une session peut avoir (ou sur le nombre de variables qu'une session peut posséder). La seule limite est les spécifications de votre ordinateur, cela est défini par votre memory_limit disponible dans votre php.ini. Sachez que cet espace sera partagé entre toutes les sessions pour tous les utilisateurs.

15
Thariama

Il est entièrement spécifique à votre serveur Web. Pour Apache, regardez ici:

http://httpd.Apache.org/docs/trunk/mod/mod_session.html

Il permet même de stocker les sessions dans la base de données en utilisant mod_session_dbd . Par conséquent, les limites physiques comme 1 fichier par session peuvent être dépassées. De plus, Apache peut être configuré pour garder une trace des sessions par utilisateur stockées sur un serveur particulier ou un groupe de serveurs pour l'évolutivité.

8
shamittomar

La réponse simple est non. (Autrement dit, ils n'ont pas plus de restrictions que toute autre PHP doit ... doit tenir en mémoire, etc.)

Cependant, gardez à l'esprit que les données $_SESSION Sont stockées quelque part, par défaut en tant que données sérialisées dans un fichier par session. Il y a donc des limites pratiques. Vous ne voudriez pas y stocker une énorme quantité d'informations car elles seraient chargées/enregistrées à partir du magasin de données sur chaque page qui utilise session_start().

3
Matthew