Comment et pourquoi l'ID de session est réutilisés dans ASP.NET

Traductions disponibles Traductions disponibles
Numéro d'article: 899918 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

INTRODUCTION

Cet article explique comment et pourquoi Microsoft ASP.NET session ID sont utilisés.

Plus d'informations

L'état de session ASP.NET est une technologie qui vous permet de stocker des données côté serveur, spécifiques à l'utilisateur. Applications Web peuvent utiliser ces données pour traiter les demandes de l'utilisateur pour lequel l'état de session a été instancié. Un utilisateur d'état de session est identifié par un ID de session. L'ID de session est remis à l'aide de l'une des méthodes suivantes :
  • L'ID de session vous appartient d'un cookie est envoyé au navigateur de l'utilisateur.
  • L'ID de session est incorporé dans l'URL. Cette technique est également connu sous le nom d'une session de moins de cookies .
ID de session existe un nombre aléatoire 120 bits qui est représenté par une chaîne de 20 caractères. La chaîne est formatée afin qu'il peut être inclus dans une URL et qu'il ne soit pas nécessaire pour subissent codage URL. Par exemple, la chaîne peut être utilisée dans les sessions moins de cookies. La méthode plus couramment utilisée de fournir des ID de session consiste à utiliser les cookies pour stocker le ID de session.

Lorsqu'un utilisateur ouvre pour leur navigateur Web la première fois et puis menant à un site qui implémente l'état de session ASP.NET, un cookie est envoyé au navigateur avec le nom « ASP.NET_SessionId » et une valeur de 20 caractères.

Lorsque l'utilisateur accède au sein du même domaine DNS, le navigateur Web continue à envoyer ce cookie au domaine pour lequel il a été origine.

Par exemple, app1.tailspintoys.com et app2.tailspintoys.com sont les applications ASP.NET. Si l'utilisateur accède à app1.tailspintoys.com et ouvre app2.tailspintoys.com, les deux applications devez utiliser le même cookie et le même ID de session pour suivre l'état de session de l'utilisateur au sein de chaque application. Les applications ne partagent pas le même état de session. Les applications partagent uniquement l'ID de session.

Par conséquent, vous pouvez réutiliser ID de session pour plusieurs raisons. Par exemple, si vous réutiliser ID de session, vous ne devrez pas effectuer les opérations suivantes :
  • Créer un nouvel ID de session unique au sens cryptographique lorsque vous sont présentés avec un ID de session valide.
  • Créer un ID de nouvelle session pour chaque application ASP.NET qui se trouve dans un domaine unique.
Lorsque l'application Web nécessite une ouverture de session et offre une page ou l'option déconnexion, nous vous recommandons de que vous désactivez l'état de session lorsque l'utilisateur a déconnecté le site Web. Pour effacer l'état de session, appelez la méthode Session.Abandon . La méthode Session.Abandon permet de vous vider l'état de session sans attendre l'expiration d'état de session. Par défaut, ce délai d'attente est une expiration glissante 20 minutes. Cette expiration est actualisée chaque fois que l'utilisateur effectue une requête sur le site Web et présente le cookie D'ID de session. La méthode abandonner définit un indicateur de l'objet d'état de session qui indique que l'état de session doit être abandonnée. L'indicateur est examiné et puis traité à la fin de la requête de page. Par conséquent, l'utilisateur peut utiliser des objets session dans la page une fois que vous appelez la méthode abandonner . Dès que le traitement de la page est terminé, la session est supprimée.

Lorsque vous utilisez le mode d'état de session in-process, ces objets état de session sont stockés dans le HttpCache. Le HttpCache prend en charge une méthode de rappel lorsque les conditions suivantes sont remplies :
  • Une entrée de cache est supprimée.
  • Le gestionnaire d'état de session enregistre le gestionnaire d'événements Session_OnEnd à être appelée lorsque l'entrée de cache est supprimée.
Lorsque le gestionnaire d'état de session supprime un objet état de session qui se trouve dans le cache, le Gestionnaire de HttpCache appellera les rappels enregistrés. En effet, ce comportement provoque le gestionnaire d'événements Session_OnEnd .

Lorsque vous risquent de quitter une session, le cookie D'ID de session n'est pas supprimé à partir du navigateur de l'utilisateur. Par conséquent, dès que la session a été abandonnée, les nouvelles demandes de la même application va utiliser le même ID de session mais auront une instance d'état de nouvelle session. En même temps, si l'utilisateur ouvre une autre application dans le même DNS domaine, l'utilisateur ne perdez pas leur état de session après que la méthode abandonner est appelée à partir d'une application.

Parfois, vous souhaiterez pas réutiliser le code de session. Si vous effectuez et si vous comprenez les ramifications de ne pas réutiliser l'ID de session, utiliser l'exemple de code suivant pour abandonner une session et désactivez le cookie D'ID de session:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
cet exemple de code efface l'état de session à partir du serveur et le cookie d'état de session null. La valeur null supprime efficacement le cookie à partir du navigateur.

Lorsqu'un utilisateur ne connectez pas hors de l'application et l'expiration d'état de session se produit, l'application peut toujours utiliser le cookie d'état de session même si le navigateur n'est pas fermé. Ce comportement provoque l'utilisateur d'être dirigé vers la page d'ouverture de session et le cookie d'état de session de l'utilisateur à être affichées. Pour garantir qu'un ID de nouvelle session est utilisé lorsque vous ouvrez la page d'ouverture de session (login.aspx), envoyer un cookie null au client. Pour ce faire, ajouter un cookie à la collection de réponse. Ensuite, renvoyer la collection de réponse au client. Méthode la la plus simple d'envoyer un cookie null consiste à l'aide de la méthode Response.Redirect . Car la collection de cookies toujours a une valeur pour le ASP.NET_SessionId, vous ne pouvez pas simplement tester si ce cookie existe parce que vous allez créer une boucle Response.Redirect . Vous pouvez définir une chaîne de requête sur la redirection vers la page d'ouverture de session.

Ou, comme illustré dans l'exemple de code suivant, vous pouvez utiliser un autre cookie pour indiquer si vous êtes déjà redirigé vers la page d'ouverture de session. Pour aider à améliorer la sécurité et vous assurer que personne n'essaie d'ouvrir la page d'ouverture de session en utilisant un cookie second avec le cookie d'ASP.NET, l'exemple de code suivant utilise la classe FormsAuthentication pour chiffrer et déchiffrer les données du cookie. Ensuite, l'exemple de code définit un délai de 5 secondes.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Propriétés

Numéro d'article: 899918 - Dernière mise à jour: vendredi 8 septembre 2006 - Version: 1.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 1.1
Mots-clés : 
kbmt kbinfo kbhowto KB899918 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 899918
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com