Le Problème
Dans la pile de nous ré-utiliser entre les projets, nous avons mis un peu trop de données dans la session de la transmission des données entre les pages. C'était bon, en théorie, parce qu'elle empêche l'altération, les attaques de relecture, et ainsi de suite, mais il crée autant de problèmes qu'elle n'en résout.
Perte de Session elle-même est un problème, même si c'est principalement gérée par la mise en œuvre de l'État de Session du Serveur (ou à l'aide de SQL Server). Plus important encore, il est difficile de faire le dos bouton de fonctionner correctement, et c'est aussi un travail supplémentaire pour créer une situation où un utilisateur peut par exemple ouvrir le même écran en trois onglets à travailler sur différents dossiers.
Et ce n'est que la partie émergée de l'iceberg.
Il existe des solutions de contournement pour la plupart de ces questions, mais comme je l'ai moudre loin, tout ce frottement me donne le sentiment que la transmission des données entre les pages à l'aide de session est la mauvaise direction.
Ce que je veux vraiment faire est de venir avec une meilleure pratique qui ma boutique pouvez utiliser tout le temps de la transmission des données entre les pages, et puis, pour de nouvelles applications, de remplacer des éléments clés de notre pile qui dépendent actuellement de la Session.
Il serait bien aussi si la solution finale n'a pas de suite dans les montagnes de réutilisable code de plomberie.
Les Solutions Proposées
Session
Comme mentionné ci-dessus, s'appuyant sur la Session semble comme une bonne idée, mais il casse le bouton de retour et cause d'autres problèmes.
Il peut y avoir des façons de contourner tous les problèmes, mais il semble que beaucoup de travail supplémentaire.
Une chose qui est très agréable sur l'utilisation de la session est le fait que l'altération n'est tout simplement pas un problème. Par rapport au passage de tout par en clair de la chaîne de recherche, vous finissez par écrire beaucoup moins de la garde de code.
La Croix-L'Affichage De La Page
En vérité, j'ai à peine songé à cette option. J'ai un problème avec la façon dont étroitement couplée il rend les pages -- si je me mets à faire PreviousPage.FindControl("SomeTextBox"), cela ressemble à un problème de maintenance si jamais je veux accéder à cette page à partir d'une autre page qui peut-être ne pas avoir un contrôle appelé SomeTextBox.
Il semble limitée par d'autres moyens également. Peut-être que je veux accéder à la page via un lien, par exemple.
QueryString
Je suis actuellement en penchant vers cette stratégie, comme dans les temps anciens. Mais j'ai probablement voulez mon QueryString être cryptés afin de le rendre plus difficile à falsifier, et je voudrais traiter le problème des attaques de relecture.
Sur les 4 gars de Rolla, il y a un article à ce sujet.
Cependant, il devrait être possible de créer un HttpModule qui prend soin de tout cela et supprime tout le chiffrement de saucisses à partir de la page. Bien sûr, Mad Kristenson a un article où il sort. Cependant, les commentaires de la faire sonner comme il a des problèmes avec extrêmement de scénarios communs.
D'Autres Options
Bien sûr, ce n'est pas exaustive de voir les options, mais plutôt les principales options je suis en train d'étudier. Ce lien contient une liste plus complète. Ceux que je n'ai pas mentionné tels que les Cookies et le Cache n'est pas approprié pour le but de la transmission des données entre les pages.
En Guise De Conclusion...
Alors, comment gérez-vous le problème de la transmission des données entre les pages? Quels pièges cachés avez-vous avoir à contourner, et il y a des pré-existante outils autour de ce que tous les résoudre parfaitement? Ne vous sentez que vous avez une solution que vous êtes complètement satisfait?
Merci à l'avance!
Mise à jour: Juste au cas où je suis de ne pas être assez clair, par "le passage des données entre les pages de" je suis en train de parler, par exemple, le passage d'un code client clé à partir d'un CustomerSearch.page aspx aux Clients.aspx, où le Client sera ouvert et l'édition peut se produire.