2009-09-03 5 views
1

J'essaie de comprendre quand je peux mettre certains objets dans une session d'utilisateurs et je me demande comment la session est stockée et les valeurs extraites de celle-ci. Si je fais une demande pour tirer la clé A de l'état de session lira-t-il également la clé B?Lorsqu'une requête est faite pour obtenir un objet d'une session d'utilisateurs, est-ce que toute la session est chargée?

Je sais que viewstate est stocké comme un grand objet et je ne vais pas supposer qu'il est ensuite accédé à partir de mon code une fois qu'il a été complètement chargé. Est-ce similaire pour les données d'état de session ou ne charge-t-il que les clés demandées par le serveur.

Donc, si mon état est 20KB et que je veux obtenir une valeur de 5KB, est-ce qu'il lira tout 20KB ou juste les 5KB dont j'ai besoin?

Répondre

2

Par défaut, l'état de la session est stocké en mémoire jusqu'à l'expiration de la session (période d'inactivité d'un utilisateur donné). L'état d'affichage n'est pas stocké du tout entre les demandes, mais est en réalité envoyé à la page en tant que champ de formulaire masqué. Ces données sont renvoyées au serveur lors des demandes suivantes.

Pour répondre à votre question, le comportement par défaut est que toute la session est DÉJÀ chargée, que vous y accédiez ou non, qu'elle soit là et en mémoire.

Il y a plusieurs options pour gérer cela, cependant, et vous pouvez trouver une excellente référence ici:

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

+0

ViewState est placé dans un champ caché, pas dans l'état de session. L'état de session reste en mémoire sur le serveur, c'est pourquoi lors de l'utilisation d'une batterie de serveurs, la session peut être perdue si l'utilisateur est renvoyé à un autre serveur lors d'une requête ultérieure ou lorsque le pool d'applications serveurs est actualisé. – NerdFury

+0

Désolé, j'ai mal lu. Vous avez dit état de vue. – NerdFury

0

Par défaut, une session de l'utilisateur est stocké dans la mémoire. Vous pouvez le configurer pour qu'il soit stocké dans la base de données, mais il est sérialisé et lu complètement lorsqu'il est ré-instancié.

Alors oui, si vous avez 20 Ko de données dans votre session utilisateurs, il utilisera toujours 20 Ko de mémoire.