HTTP est un protocole sans état pour une raison. Les sessions soudent l'état sur HTTP. En règle générale, évitez d'utiliser l'état de session.
MISE À JOUR: Il n'y a pas de concept de session au niveau HTTP; les serveurs fournissent cela en donnant au client un identifiant unique et en disant au client de le soumettre à nouveau à chaque demande. Ensuite, le serveur utilise cet ID comme clé dans une grande table de hachage d'objets Session. Chaque fois que le serveur reçoit une demande, il recherche les informations de session dans sa table de hachage d'objets de session en fonction de l'ID que le client a soumis avec la demande. Tout ce travail supplémentaire est un double coup dur sur l'évolutivité (une grande raison pour laquelle HTTP est sans état).
- Whammy One: Cela réduit le travail qu'un seul serveur peut faire.
- Whammy Two: Cela rend la mise à l'échelle plus difficile car maintenant vous ne pouvez plus simplement acheminer une requête vers n'importe quel ancien serveur - ils n'ont pas tous la même session. Vous pouvez épingler toutes les demandes avec un ID de session donné sur le même serveur. Ce n'est pas facile, et c'est un point de défaillance unique (pas pour le système dans son ensemble, mais pour de gros morceaux de vos utilisateurs). Vous pouvez également partager le stockage de session sur tous les serveurs du cluster, mais vous avez désormais plus de complexité: mémoire connectée au réseau, serveur de session autonome, etc.
Compte tenu de tout cela, plus vous mettez d'informations dans la session, plus l'impact sur les performances est important (comme le souligne Vinko). Comme le souligne Vinko, si votre objet n'est pas sérialisable, la session se comportera mal. Donc, en règle générale, évitez de mettre plus que ce qui est absolument nécessaire dans la session.
@Vinko Vous pouvez généralement contourner l'état de stockage du serveur en incorporant les données que vous suivez dans la réponse que vous renvoyez et en demandant au client de la resoumettre, par exemple, en envoyant les données dans une entrée masquée. Si vous avez vraiment besoin d'un suivi de l'état côté serveur, il devrait probablement se trouver dans votre banque de données de sauvegarde.
(Vinko ajoute: PHP peut utiliser une base de données pour stocker les informations de session, et demander au client de resoumettre les données à chaque fois peut résoudre des problèmes d'évolutivité potentiels, mais ouvre un grand nombre de problèmes de sécurité auxquels vous devez faire attention maintenant que le client contrôle tout ton état)