Question

Lors de la création d'une application Web, et disons que vous avez un objet User désignant un seul utilisateur, quelle est, selon vous, la meilleure façon de stocker que l'utilisateur s'est connecté ?

Deux façons auxquelles j'ai pensé ont été :

  • Stocké l'identifiant de la base de données utilisateur dans une variable de session
  • Stocké l'intégralité de l'objet utilisateur dans une variable de session

Avez-vous de meilleures suggestions, des problèmes liés à l'utilisation des méthodes ci-dessus ?Peut-être des problèmes de sécurité ou de mémoire, etc.

Était-ce utile?

La solution

Je recommande de stocker l'identifiant plutôt que l'objet.L'inconvénient est que vous devez accéder à la base de données chaque fois que vous souhaitez obtenir les informations de cet utilisateur.Cependant, à moins que chaque milliseconde compte dans votre page, les performances ne devraient pas poser de problème.Voici deux avantages :

  1. Si les informations de l'utilisateur changent d'une manière ou d'une autre, vous ne stockerez pas d'informations obsolètes dans votre session.Par exemple, si un utilisateur bénéficie de privilèges supplémentaires par un administrateur, ceux-ci seront immédiatement disponibles sans que l'utilisateur ait besoin de se déconnecter puis de se reconnecter.

  2. Si les informations de votre session sont stockées sur le disque dur, vous ne pouvez stocker que des données sérialisables.Ainsi, si votre objet User contient quelque chose comme une connexion à une base de données, un socket ouvert, un descripteur de fichier, etc., cela ne sera pas stocké correctement et ne pourra pas non plus être nettoyé correctement.

Dans la plupart des cas, ces préoccupations ne poseront pas de problème et l’une ou l’autre approche conviendra.

Autres conseils

Pour des raisons de sécurité, je générerais (soit un GUID, soit un RNG cryptographiquement sécurisé) un ID de session et j'aurais une table qui mappe simplement les ID de session aux ID d'utilisateur.Ensuite, il vous suffit de stocker l'ID de session dans leurs cookies et de le faire servir de proxy pour l'ID utilisateur.

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

Grâce à cela, personne ne peut usurper l’identité d’un autre utilisateur en devinant son identifiant.Il vous permet également de limiter les sessions des utilisateurs afin qu'ils doivent se connecter de temps en temps (deux semaines sont habituelles).Et si vous souhaitez stocker d'autres données sur leur session, vous pouvez simplement les ajouter à ce tableau.

N'oubliez pas que si vous stockez tous les attributs de l'utilisateur (cela s'étend aux autorisations) dans la session, toute modification apportée à l'utilisateur ne prendra effet que lorsqu'il se reconnectera.

Personnellement, je stocke le nom et l'identifiant pour une référence rapide et je récupère le reste lorsque j'en ai besoin.

Le stockage de l'identité est la meilleure pratique dans la plupart des cas.Une raison importante à cela est l’évolutivité.Si vous stockez l'objet utilisateur (ou toute entité de la base de données, au lieu de simplement leurs identifiants), vous rencontrerez des problèmes pour augmenter le nombre de serveurs desservant votre site.Pour plus d'informations, recherchez sur Google "l'architecture sans partage".

Je pense que cela dépend de la plateforme que vous utilisez.Si vous utilisez ASP.net, je jetterais certainement un œil au FormulairesAuthentification classe et toutes les fonctionnalités intégrées (et extensibles) que vous pouvez utiliser pour stocker vos paramètres utilisateur connectés.

Je stockerais une valeur hachée de l'identifiant utilisateur et de l'identifiant de session, puis je la ferais correspondre dans une table de sessions de la base de données.De cette façon, il sera plus difficile d’usurper les données de session.Puis-je également vérifier l'adresse IP en guise de vérification supplémentaire.

Je ne suis pas sûr que je voudrais m'appuyer sur un identifiant utilisateur stocké dans une variable de session et avoir confiance qu'il s'agissait de cet utilisateur, car il pourrait être modifié assez facilement et accéder en tant qu'autre membre.

Je stocke généralement l'utilisateur dans la session.Le problème de modification impossible jusqu'à la connexion peut être résolu en remplaçant l'objet dans la session par une nouvelle copie après avoir apporté des modifications.

Notre objet utilisateur est assez léger, nous avons donc choisi de le stocker dans une variable de session.Je ne sais pas si c'est le plus efficace, mais jusqu'à présent, cela fonctionne très bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top