La session Web est-elle «mauvaise conception»? Pourquoi?

13

l'autre jour, je discutais avec un collègue et il est sorti en disant que l'utilisation de la session de l'utilisateur dans une application Web était tout simplement fausse. J'ai répondu que cela pouvait être faux selon les informations que vous stockez, sinon pourquoi un service de session Web devrait-il même être fourni par Microsoft (nous parlions d'ASP.NET).

Il m'a répondu, encore une fois, que même dans les États membres, ils pouvaient facilement me répondre que c'était une mauvaise conception. Et qu'il pourrait me montrer des livres blancs le démontrant.

Malheureusement, je n'ai plus la possibilité de contacter ce type, mais j'aimerais vraiment en savoir plus sur son point de vue. Quelqu'un a-t-il des informations / points de vue à ce sujet ici?

abx78
la source
2
Le protocole HTTP a été initialement conçu pour être "sans état" - de sorte que toutes les transactions étaient singulières et basées sur les informations fournies. Les sessions sont un moyen de contourner cela dans certaines utilisations. En pratique, cependant, pour de nombreux sites Web modernes, je ne peux pas penser à un moyen simple d'éviter les sessions; peut-être que je ne suis pas assez créatif.
Katana314
@ Katana314 Stockage de base de données avec cookies. Vous pouvez utiliser des sessions pour des informations très basiques comme l'identification de l'utilisateur, mais de nombreuses implémentations de session (en particulier dans Django, que nous avons rencontrées plusieurs fois) ont des failles qui peuvent créer des conditions de concurrence critique avec des données plus transitoires chaque fois que plusieurs demandes du même utilisateur sont envoyés à la fois (comme avec les appels AJAX)
Izkata
2
Le stockage de la base de données avec des cookies consiste simplement à héberger votre session dans une base de données.
Alan Shutko

Réponses:

11

Je ne pense pas qu'il voulait autant dire «mauvaise conception» que «mauvaise pratique». D'une manière générale, une application Web doit être aussi apatride que possible. Même si, par exemple, vous pouvez avoir besoin de connaître les informations utilisateur afin d'autoriser l'affichage des pages, ces informations peuvent être enregistrées sur la machine client sous la forme d'un cookie et le serveur valide simplement les informations utilisateur à chaque fois.

Ce serait idéal, mais vous ne pouvez pas toujours compter sur le client pour pouvoir enregistrer les cookies. En outre, cela implique de valider l'utilisateur de manière sans état, ce qui implique potentiellement d'interroger des informations dans la base de données pour une simple demande de page. Souvent, il est simplement plus simple d'enregistrer ces informations dans la session.

Cependant, une fois que vous avez franchi le Rubicon, de nombreux programmeurs sont tentés de sauvegarder non seulement les informations d'authentification dans la session, mais aussi bien d'autres choses. Il s'agit d'un anti-modèle et tend à rendre votre application Web fortement dépendante de l'état, ce qui était précisément ce qui devait être évité en premier lieu.

Certains programmeurs s'appuieraient sur une technologie comme Spring (si vous utilisez Java) pour démêler ce qui serait autrement un gâchis de dépendances, mais je dirais que cela facilite la création de dépendances plutôt que leur élimination. De telles technologies devraient faciliter votre développement et non pas rendre votre anti-pattern moins problématique.

Par conséquent, une bonne règle de base est que si vous pouvez l'écrire sans état, c'est probablement une meilleure idée de le faire ou vous risquez de tomber dans ce piège. Évidemment, vous allez rencontrer des situations dans lesquelles cela est nécessaire, mais en règle générale, vous ne devez enregistrer que des informations qui seraient autrement difficiles à réacquérir.

Neil
la source
1
but you can't always count on the client being able to save cookiespuis AFAIK, vous ne pouvez pas non plus compter sur les sessions. Les cookies ne sont-ils pas utilisés pour identifier quelle session appartient à quel utilisateur, ou existe-t-il d'autres méthodes et c'est tout simplement la plus courante?
Izkata
Les informations de session sont normalement enregistrées sur le serveur pour chaque connexion serveur / client, et cela est devenu une tendance populaire pour les grands sites Web qui ne pouvaient pas compter sur les utilisateurs ayant activé les cookies. Il existe des options (et / ou des bibliothèques js) qui forcent la sauvegarde de ces informations sur le PC client (qui est devenu très populaire ces derniers temps), mais sans HTML 5, les cookies sont le seul moyen d'y parvenir. À ma connaissance, il n'y a pas d'autre moyen de procéder.
Neil
8

Je pense que vous confondez deux sujets différents: 1) les sessions et 2) le modèle de page des formulaires Web asp.net

Une session Web est nécessaire pour authentifier un utilisateur. Idéalement, une session ne devrait être utilisée qu'à cette fin. Vous ne devez pas stocker les données utilisateur dans une session (que ce soit sur le serveur, dans un cookie ou comme asp.net/webforms le fait: dans la page elle-même). Personne ne devrait dire qu'une session Web est mauvaise, mais plutôt stocker des données utilisateurdans une session est une mauvaise pratique. Les raisons de ne pas stocker les données utilisateur sur le serveur incluent les mêmes raisons pour éviter les variables globales. Le stockage des données utilisateur dans des cookies ou dans la page peut introduire des problèmes de sécurité. L'utilisation du modèle de page d'asp.net n'adhère pas non plus à la nature apatride du Web. Vous pouvez effectuer une recherche pour en savoir plus sur les raisons pour lesquelles les formulaires Web sont une mauvaise conception. Les sessions, d'autre part, sont une partie nécessaire des applications Web.

codeur
la source
"Les sessions, d'autre part, sont une partie nécessaire des applications Web." Non
masterxilo
6

Les contrôles et le stockage de l'état de session sur une page sont essentiellement un hack. C'est le cas de MS - nécessaire car ils voulaient être en mesure de fournir un environnement de développement où vous pourriez concevoir des pages comme vous le pouvez dans les environnements Winform.

Les MS ont eux-mêmes évolué vers l'architecture MVC (dernière version - MVC 4) qui est plus un retour à ce que le protocole devrait réellement être - sans état.

Il y a des situations où le stockage de l'état est toujours pratique mais il faut comprendre que c'est l'exception plutôt que la règle.

Robbie Dee
la source