L'état de mémoire n'est pas nécessairement une mauvaise chose, mais vous devez comprendre la différence entre les applications avec état et sans état. En bref, les applications avec état conservent des informations sur la session en cours, contrairement aux applications sans état. Les informations stockées de manière permanente dans le cadre d'un compte d'utilisateur peuvent ou non être stockées dans une session, mais le stockage d'informations relatives à un compte d'utilisateur ne confère pas à l'application un état dynamique. La mise en état nécessite que le serveur conserve des informations sur la session de l'utilisateur actuel, au-delà de ce que le navigateur client gère. Par exemple, un client peut s'authentifier et recevoir un cookie JSESSIONID, qu'il envoie ensuite au serveur à chaque demande. Si le serveur commence à stocker des éléments dans l'étendue de session de l'application en fonction de ce JSESSIONID, il devient dynamique.
Apatridie
Par sans état, nous voulons dire que le serveur et le client ne conservent pas les informations actuelles sur la session utilisateur. Le client et le serveur peuvent utiliser une forme de jeton pour assurer l'authentification entre les demandes, mais aucune autre information actuelle n'est stockée. Un cas d'utilisation typique pour une telle solution pourrait être un site de nouvelles où la plupart des utilisateurs (nouveaux consommateurs) consomment des informations sans produire d'informations renvoyant au site. Dans ce cas, le site n'a pas besoin de conserver d'informations sur la session utilisateur en cours. Notez que le site peut toujours utiliser des cookies pour identifier l'utilisateur et stocker des informations sur l'utilisation du site par cet utilisateur, mais cela peut toujours être considéré comme sans état, dans la mesure où tout ce qui est enregistré peut être transactionnel, par exemple le lien sur lequel l'utilisateur a cliqué, qui pourrait être enregistré par le serveur, mais pas maintenu dans une session d'utilisateur.
Statefulness sur le serveur
Sur le serveur, une application avec état enregistre les informations d'état concernant les utilisateurs actuels. Cette approche implique généralement l'utilisation de cookies pour identifier le système de l'utilisateur afin que cet état puisse être maintenu sur le serveur entre les demandes. Les sessions peuvent ou non être authentifiées, en fonction du contexte de l'application. Les applications de serveur avec état offrent l'avantage de mettre en cache les informations d'état de l'utilisateur sur le serveur, d'accélérer les recherches et le temps de réponse des pages. Inconvénient, stocker des informations dans l'étendue de la session coûte cher et, à grande échelle, cela nécessite beaucoup de ressources. Il crée également un vecteur d’attaque potentiel permettant aux pirates d’essayer de détourner les identifiants de session et de voler les sessions utilisateur. Les applications de serveur avec état ont également pour défi de protéger les sessions utilisateur contre les interruptions de service inattendues, telles que les pannes de serveur.
Statefulness sur le client
À l'aide de JavaScript et de technologies de navigation modernes telles que sessionStorage, les applications peuvent désormais stocker facilement des informations sur l'état d'une session utilisateur sur le périphérique de cet utilisateur. Dans l’ensemble, l’application peut toujours être considérée comme un état, mais le travail de maintien de l’état a été déplacé vers le client. Cette approche présente un gros avantage (pour le responsable de l'application Web) par rapport au maintien de l'état sur le serveur, dans la mesure où chaque utilisateur maintient son propre état et que l'infrastructure du serveur n'est pas surchargée. À l'échelle du Web, ce type de choix architectural a d'énormes répercussions sur les coûts de matériel et d'électricité. Le maintien de l'état sur le serveur pourrait coûter des millions de dollars par an. Passer à un système maintenant le système sur le client pourrait alors économiser des millions de dollars par an.
Jetons v. Cookies
Les cookies agissent comme des identifiants pour les appareils clients / navigateurs. Ils peuvent être utilisés pour stocker toutes sortes de choses, mais généralement, ils stockent une forme d'identifiant, comme CFID / CFTOKEN dans les applications CFML. Les cookies peuvent être configurés pour vivre longtemps dans le navigateur de l'utilisateur, ce qui permet par exemple de maintenir l'authentification sur une application entre les sessions du navigateur. Les cookies peuvent également être configurés uniquement en mémoire afin qu'ils expirent lorsqu'un utilisateur ferme le navigateur.
Les jetons sont généralement une sorte d'informations d'identification sur l'utilisateur générées sur le serveur (en utilisant un cryptage pour brouiller les informations), transmises au client et renvoyées au serveur avec la requête suivante. Ils peuvent être transmis dans l'en-tête de la demande et de la réponse, ce qui est un modèle courant dans les applications à page unique. Idéalement, chaque requête / réponse génère un nouveau jeton. Par conséquent, les jetons ne peuvent pas être interceptés et utilisés plus tard par un attaquant.
Applications sur une seule page et état du client
Avec les SPA, les informations d'état sont chargées dans le navigateur client et y sont conservées. Lorsque l'état change, par exemple si vous publiez une mise à jour sur votre compte de réseau social, le client relaie cette nouvelle transaction sur le serveur. Dans ce cas, le serveur enregistre cette mise à jour dans un magasin de données persistant, comme une base de données, et retransmet au client les informations dont il a besoin pour se synchroniser avec le serveur en fonction de la mise à jour (par exemple, un ID pour la mise à jour).
Notez que ce modèle d'état de stockage sur le client offre des avantages pour les expériences en ligne / hors ligne dans la mesure où vous pouvez être déconnecté du serveur tout en conservant une application quelque peu utilisable. Twitter est un bon exemple de ce cas, où vous pouvez consulter tout ce qui est chargé côté client dans votre flux Twitter, même si vous êtes déconnecté de l'application du serveur Twitter. Ce modèle crée également une complexité dans la synchronisation entre serveur et client, qui est un sujet à part entière. Les complexités de la solution sont un compromis pour pouvoir maintenir l’état sur le client.
L'état d'état sur le client permet aux applications Web de se sentir et de se comporter davantage comme les applications de bureau traditionnelles. Contrairement aux applications de bureau, toutes les informations de votre compte ne seront généralement pas chargées dans votre session client dans un navigateur. Dans de nombreux cas, cela serait irréalisable et produirait de mauvaises expériences. Pouvez-vous imaginer essayer de charger une boîte Gmail entière dans le navigateur? Au lieu de cela, le client conserve des informations telles que l'étiquette / le dossier que vous consultez et l'emplacement de la liste des courriels de ce dossier que vous recherchez. Équilibrer quelles informations d'état à conserver et que demander selon les besoins est un autre défi technique de ce modèle. Encore une fois, cela représente un compromis entre l'aspect pratique et la fourniture d'une bonne expérience utilisateur.
Chariots de magasinage et similaires
En ce qui concerne les spécificités telles que les paniers d'achat, cela dépend vraiment de la solution. Un panier peut être stocké dans une base de données sur le serveur, il peut être stocké uniquement dans la portée de session sur le serveur ou même dans le client. Amazon propose des paniers d'achat permanents pour les utilisateurs connectés et des paniers "temporaires" pour les utilisateurs anonymes, bien que ces paniers soient persistants dans une certaine mesure.
Lorsque vous parlez de Google, par exemple, qui regroupe différentes applications de la même marque, elles ne partagent probablement pas une architecture commune et chacune est conçue de manière à répondre au mieux aux besoins de ses utilisateurs. Si vous souhaitez savoir comment un site est construit, ouvrez les outils de développement de votre navigateur et consultez-le. Recherchez des cookies, surveillez le trafic réseau et voyez comment il fonctionne.
Désolé si cette réponse décale un peu, mais l'état d'esprit est un sujet complexe.