2011-05-05 5 views
2

Je suis un peu confus sur le cycle de vie de la session dans ASP.NET, voici mon cas de test.Session cycle de vie question

Un utilisateur se connecte, j'enregistre quelques informations dans une variable de session (par exemple Session["bob"]="bob") puis je procède à une "réinitialisation IIS". est toujours connecté à l'utilisateur, mais les données de session est null (par exemple Session["bob"].ToString() jette un NullReferenceException.

Je me attendais les données de session d'être toujours là. Est-il quelque chose que je peux faire, autre que déconnecter l'utilisateur? Je me attendais les données de session à être aussi longtemps que l'utilisateur est encore connecté.

Tous les bons liens donc je grok ce qui se passe, ainsi que toute aide avec le problème réel est grandement apprécié.J'ai essayé Google, mais n'a pas été en mesure de formuler la question de manière à obtenir ce que je voulais.

+0

Veuillez poster votre code - votre question n'est pas très claire. – Oded

Répondre

7

Le comportement que vous voyez - où les Session contenus ne survivent pas un événement de réinitialisation IIS - est dû à l'endroit où les valeurs de session sont stockés. Par défaut, ces valeurs sont stockées dans la mémoire du "Worker Process" ASP.NET, qui est le programme qui exécute votre site Web ASP.NET. Lorsque vous effectuez une "réinitialisation des services Internet (IIS)", vous arrêtez le serveur IIS entier, y compris le processus de travail ASP.NET. Cela signifie que le contenu de la session est supprimé de la mémoire. Votre utilisateur semble toujours être connecté car il est contrôlé par le cookie stocké dans son navigateur. Si le cookie est toujours valide, la connexion est.

Si vous souhaitez que votre état de session survive à une réinitialisation IIS (ou toute autre action entraînant le redémarrage du processus de travail ASP.NET), vous devez stocker vos objets Session à un autre emplacement. Cela est entièrement pris en charge par ASP.NET en utilisant différents "Modes" de stockage de session. Lisez à propos de ceux dans l'article MSDN "Session-State Modes".

Pour un aperçu général de la session, consultez l'article "ASP.NET Session State Overview" sur MSDN.

0

yah son droit mais un certain temps sa se produire alors la session supprimer pas correctement à ce moment-

vous devez vérifier la session comme

If Session("username") = nothing then 

Response.redirect("~/default.aspx") 

End if 
+0

Quel événement dans Global.asax devrais-je tester cela? Je pensais que je me souvenais de l'avoir fait avant, mais j'échoue, trouvant le bon événement. –

+1

simple session_start –

+0

Will Sessio ["bob"] n'est pas toujours == null en début de session, donc il vous redirigera toujours vers la page de connexion, même la première fois que j'essaye de me connecter? –