Pourquoi voudriez-vous jamais utiliser l'objet de stockage ViewState asp.net sur l'objet de stockage de session?

StackOverflow https://stackoverflow.com/questions/575568

Question

Autre que parce que le stockage de session est une session globale à plus d'une page, pourquoi voudriez-vous jamais utiliser le viewstate pour contenir des valeurs?

Il semble un peu ridicule d'envoyer tout type d'information autre que quelques petites chaîne de requête comme les valeurs, et-vient du client vers le serveur. Je veux dire quel gaspillage de bande passante (!), Simplement à des fins de stockage. La session, alors que mondiale sur plusieurs pages, semble être une alternative tout à fait supérieure à la viewstate.

Surtout avec asp.net contrôles ajax et variantes, le ViewState pourrait rapidement devenir pléthorique suivi des différents états et variables de tous ces différents contrôles et éléments HTML.

Mais alors pourquoi est-il un stockage ViewState pour les variables de page et d'objets du tout?

Peut-être que je manque une autre grande utilisation pour le stockage de l'état d'affichage de la page, quelqu'un sait quelque chose là-bas?

Merci d'avoir lu!

EDIT:. Tout le monde a eu une grande réponse, désolé si je ne l'ai pas acheter votre

Était-ce utile?

La solution

Sessions

à court, Viewstate n'a pas - vous pouvez revenir une heure plus tard et votre viewstate sera toujours disponible. Viewstate est toujours disponible lorsque vous revenez en arrière / avant sur le site, les changements de session.

Autres conseils

La raison pour toute Viewstate ou session est de transformer le web à partir d'un système sans état dans une dynamique, une expérience personnalisée. Lorsqu'un utilisateur demande une page, la seule façon que vous pouvez reprendre là où l'utilisateur laissé dans leur expérience est de se rappeler l'état soit sur le serveur ou sur le client de l'utilisateur.

Viewstate est un mécanisme pour se rappeler l'état de l'utilisateur sur le client. Session est un mécanisme pour se rappeler l'état de l'utilisateur sur le serveur.

Viewstate est un mécanisme de stockage transitoire. Les contrôles qui utilisent viewstate ont leur état rendu dans la page html comme entrée cachée. Pour éviter toute manipulation, il est signé. Il n'est pas crypté, cependant, vous voulez probablement éviter de mettre QUOI QUE CE SOIT sensible là-dedans. Viewstate est utile pour les situations où vous souhaitez publier dans la série de demandes multiples (charges de page). Un exemple de ceci est quand une forme ne valide pas parce que peut-être l'utilisateur est entré dans une mauvaise adresse e-mail ou quelque chose, et que vous souhaitez restaurer le formulaire tel qu'il était avant que l'utilisateur a soumis. Les inconvénients à cela est que ViewState est une bête affamée et peut facilement ajouter 30-50% à la taille de la page.

session, d'autre part, est stocké sur le serveur. Le client reçoit un jeton qui indique au serveur bloc de mémoire est le leur. Cela peut être beaucoup plus sûr que viewstate parce que les données ne sont pas retransmises à l'utilisateur plus et plus. Il y a des compromis bien. Votre serveur peut manquer de mémoire. Ou, l'utilisateur pourrait perdre les données si leur session est interrompue.

En général, il n'y a pas de réponse « droit » sur lequel utiliser. Il est tout ce que vous essayez d'accomplir.

La plupart des choses à faire avec les contrôles devraient utiliser Viewstate. Si vous avez affaire à des informations sensibles cependant, envisager session. Si vous avez des données qui est pour un ensemble de pages, utilisez viewstate. Si ce sont des données que vous aurez besoin tout au long de la visite d'un utilisateur sur votre site, considier session.

Par exemple, lorsque votre application peut être en cours d'exécution dans une ferme d'ordinateur et vous ne pouvez pas configurer session pour utiliser le serveur SQL. (Ou en utilisant le serveur SQL est trop d'un coup de performance)

ViewState et session ont des portées différentes. ViewState est conçu pour stocker des données plus ou moins transitoires, au cours de « postbacks », alors que la session est utilisée pour enregistrer les données d'état de session critiques. Je recommande d'utiliser ViewState pour l'état lié à une « session de page » spécifique.

Si vous ne voulez pas le comportement normal de ViewState, il est assez simple d'écrire votre propre PageStatePersister et laissez cet objet effectuer la persistance, par exemple en utilisant session, ou quelque chose comme Memcached. Vous pouvez remplacer complètement le mécanisme de persistance par défaut.

Alors, la bonne chose est que vous pouvez continuer à utiliser de façon transparente les contrôles Web standard dans le .NET Framework, qui sera toute utilisation ViewState / ControlState pour ce type de données, sans ballonnements le ViewState. Un mécanisme de persistance de la mémoire du serveur peut être très efficace.

Pas vraiment une réponse directe à votre question, mais il peut résoudre votre problème.

Vous pouvez stocker côté serveur viewstate, ce qui élimine la charge utile pour le client.

Créer une classe la page inherits, et remplacer le PageStatePersister. http://msdn.microsoft.com/en- nous / bibliothèque / system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

ViewState est essentiellement juste une entrée cachée qui doit être téléchargé sur le serveur et analysé à chaque demande. Ce champ est généralement rempli automatiquement, souvent avec le programmeur parfaitement au courant, et peut devenir assez grande. Pour de nombreux sites qui pose un problème, parce que même les utilisateurs à large bande ont une bande passante limitée très en amont.

Sur les sites intranet où tous les utilisateurs ont accès au réseau local haut débit au serveur, mais la RAM disponible pour conserver les données de session est limitée, il peut faire plus de sens.

Pas une réponse à votre question, mais un de vos hypothèses est incorrecte.

ID de session peut être transmis dans l'URL. Session ne nécessite pas les cookies.

http://msdn.microsoft.com/en-us/library /aa479314.aspx

<sessionState cookieless="true" />

Vous faites une application où viewstate ballonnement, pour la plupart, ne sont pas un problème, alors il est préférable de page stocker les données spécifiques dans le viewstate, car il permet à votre serveur plus performant. Si vous allez fou avec la session, ou toute mise en cache, pour cette question, vous pouvez vous blesser plus vous vous aider.

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