Ce n'est pas pour rien que le protocole HTTP est un protocole sans état. Les sessions soudent l'état sur HTTP. En règle générale, il convient d'éviter d'utiliser l'état de session.
UPDATE : Il n'y a pas de concept de session au niveau HTTP ; les serveurs fournissent ce concept en donnant au client un identifiant unique et en lui demandant de le soumettre à nouveau à chaque demande. Le serveur utilise ensuite cet identifiant comme clé dans une grande table de hachage d'objets Session. Chaque fois que le serveur reçoit une requête, il recherche l'information de session dans sa table de hachage d'objets de session en se basant sur l'identifiant que le client a soumis avec la requête. Tout ce travail supplémentaire est un double coup dur pour l'évolutivité (l'une des principales raisons pour lesquelles le protocole HTTP est sans état).
- Premier coup dur : il réduit le travail qu'un seul serveur peut accomplir.
- Deuxième inconvénient : il est plus difficile de faire évoluer le système, car il n'est plus possible d'acheminer une demande vers n'importe quel serveur - ils n'ont pas tous la même session. Il est possible d'épingler toutes les demandes avec un identifiant de session donné au 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 une grande partie de vos utilisateurs). Vous pouvez également partager le stockage des sessions entre tous les serveurs de la grappe, mais vous devez alors faire face à une plus grande 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 la performance est important (comme le souligne Vinko). De plus, 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 le stockage de l'état par le serveur en incorporant les données que vous suivez dans la réponse que vous renvoyez et en demandant au client de la soumettre à nouveau, par exemple en envoyant les données dans une entrée cachée. Si vous vraiment a besoin d'un suivi de l'état côté serveur, il devrait probablement se trouver dans votre datastore de sauvegarde.
(Vinko ajoute : PHP peut utiliser une base de données pour stocker les informations de session, et le fait que le client soumette à nouveau les données à chaque fois peut résoudre les problèmes d'évolutivité, mais ouvre une grande boîte de problèmes de sécurité auxquels vous devez prêter attention maintenant que le client contrôle tout votre état).