37 votes

Toujours acceptable d'utiliser les variables de session dans ASP.NET mvc, ou existe-t-il une meilleure alternative pour certaines choses (comme un panier)

J'ai une situation où j'ai besoin d'accéder à un panier d'achat sur plusieurs pages. Ainsi, sur la page du produit - créer un panier ajouter quelques éléments Sur le chariot, la page de paiement, - de confirmer l'adresse de facturation Sur la cart checkout post - faire une dernière vérification, ajouter panier de DB, et allez de paiement

Ma question est, quel est le meilleur moyen de passer à travers le panier?

J'ai essayé de passer le Panier à partir de la page de publication et de garder toutes les valeurs en vie, cependant sur certaines pages (l'adresse de facturation de la page de confirmation) il semble que beaucoup de tracas, tout ce que je veux vérifier, c'est l'adresse de facturation et ne veux vraiment des tonnes de HiddenFor() sur la page pour remplir le panier de retour à nouveau

TempData[] est ce que j'ai utilisé pour le produit à la page de paiement, se pose alors la question est-il préférable de garder sur la mise TempData tout le temps quand....

vous pouvez simplement utiliser une variable de session?

Pour une raison quelconque, j'ai lu son pas super pratique à utiliser Session, d'où la question.

Merci pour vos conseils, je peux heureux de fournir un peu de code/plus d'infos si vous le jugez utile.

58voto

Zruty Points 4078

Il est parfaitement OK pour utiliser les sessions dans ASP.NET MVC, en particulier dans le panier du scénario de la vôtre.

Il existe des inconvénients de l'utilisation de sessions, mais ils ne semblent pas s'appliquer à votre cas:

1) Les séances d'empêcher un utilisateur de bien parcourir votre site à partir de plusieurs onglets du navigateur, les modifications apportées à un onglet se reflètent dans tous les autres. Mais avec un panier d'achat, c'est exactement ce dont vous avez besoin. Vous n'avez pas besoin de plusieurs paniers d'achat par l'utilisateur, pensez-vous?

2) Les sessions ne sont pas conservés par défaut, et si vous êtes d'exploitation sur un webfarm, vous devez enregistrer les sessions dans votre base de données soit accessible par tous à la ferme nœud. Mais il semble peu probable que vous vous êtes mise à l'échelle de ce genre. Et si vous répondez à la mise à l'échelle neccessity, les sessions ne sera pas le top des problèmes.

3) Sessions besoin de fonctionnalités supplémentaires à partir du navigateur de l'utilisateur (en général, les cookies). Mais tous les navigateurs modernes prennent en charge les cookies, si vous avez seulement à vous soucier de très spécial navigateurs.

Il y a aussi quelques avantages de sessions au cours du caché entrées:

1), plus les frais généraux. Seul un petit cookie de session est transmis en arrière entre vous et le client, pas le jeu complet de caché entrées.

2) simplicité de programmation. Vous n'avez pas à assurez-vous que vous avez inclus caché entrées dans chacune de vos pages.

3) la Sécurité. Le client peut modifier le contenu de l'caché entrées cependant il lui plaît. Vous ne pouvez pas passer facilement à des informations sensibles via caché entrées, vous avez besoin de le chiffrer. Valeurs de Session sont stockés sur le serveur, le client n'a pas accès à eux.

11voto

James McCormack Points 4828

Les séances sont très bien, mais pensez à Amazon de style système dans lequel vous sont délivrés avec une reconnaissance cookie, même lorsque vous n'êtes pas connecté. Cela leur permet de stocker votre panier dans la base de données, incrustée à l'encontre de la reconnaissance de cookie.

Le résultat est que vous éviter l'horrible expérience de l'utilisateur de perdre votre panier d'achat en raison de délai d'expiration de session serveur / domaine d'application de recyclage (le dernier est atténué par l'utilisation de SQLState de stockage de session, que je recommande). L'utilisateur peut revenir jours plus tard et leur panier sera toujours là. À moins que l'un de sécurité / confidentialité problème, j'ai trouver la meilleure solution.

10voto

Il est tout à fait correct d’utiliser une session avec l’application asp.net mvc. steve sanderson a utilisé session for cart dans l'exemple d'application fourni avec son livre. Le code est disponible ici

5voto

Palantir Points 11889

Je voudrais utiliser de la Session, sauf s'il y a des raisons pour l'éviter.

Par exemple, j'ai un projet où j'ai répété les appels à un MVC action en arrière-plan. Cette action sert d'un fichier, qui est trop lent sur le réseau. J'ai utilisé de la Session, mais j'ai rapidement découvert le principal effet indésirable: IIS ne pas exécuter les appels du même utilisateur en parallèle, mais seulement de manière séquentielle, un après l'autre. Cela a eu un impact dramatique sur les performances, j'ai donc utilisé une autre méthode: j'ai mis HttpContext.De l'utilisateur.L'identité de l'utilisateur, et l'utiliser comme la clé pour aller chercher les choses à partir de la base de données. Mais vous pourriez probablement mettre à certains GUID aléatoire et d'avoir à remplacer des Séances.

2voto

simonlchilds Points 1658

J'ai tendance à utiliser un cookie avec mon panier sérialisé en base64 string cela semble fonctionner assez bien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X