-
Utilisation des sessions
Bonjour,
J'utilise beaucoup de variable session sur mon site (je ne sais pas si j'en abuse).
Question : l'utilisation de ce type de variable mobilise-t-elle de la RAM ? Si non, comment sont stockées ces variables sur le serveur ?
Pour info, je pose cette question car j'utilise trop de RAM sur le serveur et je travaille actuellement sur mes fonctions pour les rendre plus efficientes.
Merci pour vos réponses
-
Bonjour
Il me semble que cette question est correcte sur le plan théorique (=c'est une bonne question et comprendre comment cela fonctionne peut être utile)
Toutefois je doute que tu stockes des centaines de MB en RAM aussi si ton serveur est déjà à bout de souffle, c'est interpellant.
La RAM est peu chère et ne devrait pas être un facteur bloquant.
Et devrait même être plus utilisée par exemple avec une couche de cache (je pense à Redis).
Au final pas de réponse de ma part mais juste une présomption que ton problème est ailleurs (mauvaise configuration serveur, vieux serveur obsolète,...)
-
Merci de vous intéresser au sujet et merci pour la réponse.
Le problème n'est pas technique, ce n'est pas non plus une question de prix.
Mes fonctions utilisent beaucoup de ressources, c'est un symptôme. Le code n'est pas efficient et je dois l'améliorer, je cherche maintenant les causes les plus probables. Je me pose donc la question est-ce que les variables sessions sont consommatrices de RAM.
-
C'est toi qui sait ce que tu stockes en mémoire... Je présume que c'est peanuts mais à toi de voir la consommation de ton code.
Tu dis que ce n'est pas efficient mais est-ce un problème de mémoire ou d'optimisation de ton code lenteur db, code php vraiment mal écrit,...)
Je doute que ce soit la RAM ton souci... Just my feeling
-
Exemple de problème :
J'interroge une table régulièrement avec une fonction de traitement des données très lourde. Donc pour éviter de rappeler cette fonction régulièrement, j'ai stocké le résultat dans une variable session. Comme je ne connais pas le fonctionnement d'un serveur (désolé), je me dis que si la session est stockée dans la RAM ma solution n'est peut être pas la bonne puisque chaque utilisateur va consommer de la RAM en permanence au lieu de l'utiliser ponctuellement lors de l'appel de la fonction.
C'est un peu ça l'idée ...
-
Et tu as parfaitement raison de faire ce choix, totalement raison. C'est ce que fait redis si tune connais pas. Redis permet de créer un système de clef valeur cross user (ton utilisateur 152 ainsi que les 150 précédents vont utiliser le cache du tout premier gars). Tu es dans la bonne direction.
En php pur (les sessions donc), je ne les pratique pas assez mais oui elles sont dépendantes de l'utilisateur (donc 152 sessions). Peux-tu trouver une solution cross user avec les sessions ? Je présume mais je n'ai pas directement la réponse.
Note que tu pourrais ne pas utiliser une variable session mais un fichier cache. Si le fichier cache n'existe pas, tu fais la requête db et tu crées le fichier. Si le fichier existe, tu vois s'il est toujours opportun (est-il vieux d'un jour, une semaine,...) et si tu souhaites l'utiliser, facile, juste une lecture du fichier.
Si tu as la possibilité d'utiliser redis (est-il installé), c'est encore plus simple.
-
Bonjour,
D'après la doc, la sauvegarde des sessions php est gérée par défaut via le système de fichier : voir la directive de configuration session.save_handler qui est définie par défaut avec le gestionnaire files
D'autres gestionnaires de sauvegarde de session sont fournis par des extensions php (sqlite, redis, ...).
La classe SessionHandler ou l'interface SessionHandlerInterface permettent de créer son propre gestionnaire de session personnalisé :
https://www.php.net/manual/fr/session.customhandler.php
Si les lenteurs viennent des requêtes, p-e commencer par voir les éventuelles optimisations possibles au niveau de la bdd.