2008-10-14 8 views
3

Sur le site que nous sommes en train de construire. Nous devons être en mesure de rediriger l'utilisateur vers une page par défaut lorsque sa session est terminée. A première vue, nous avons utilisé Session_End avec Response.Redirect pour faire ce travail.Quel est le moyen le plus efficace de gérer une session expirée avec ASP.NET 2.0

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) 
    Response.Redirect("~/global/exit.aspx") 
End Sub 

Mais il génère un crapload de réponse n'est pas disponible dans ce contexte des erreurs. Naturellement, nous ne voulons pas spammer les journaux d'erreurs de nos serveurs.

Quelle est la manière la plus efficace de gérer la fin de session avec ASP.NET 2.0?

Répondre

2

Nous l'avons manipulé en vérifiant si les données de session existaient dans Application.Begin_Request pour les pages qui étaient spécifiques à l'utilisateur et si elles ne redirigeaient pas alors l'utilisateur vers la page de connexion ou d'accueil.

2

Vous pouvez utiliser la méthode session_end, car ce n'est pas une méthode appelable par l'utilisateur, elle est déclenchée par ASP.NET et la réponse n'est pas disponible, car elle ne fait pas partie de la requête.

Le plus important est de vérifier et de voir si la session est manquante, quelque part dans le chargement de vos pages et de rediriger vers le principal.

Ce que j'ai déjà fait est de mettre cette logique de vérification à l'intérieur d'une page maître "RestrictedPage.master" qui a été utilisée pour toutes les pages spécifiques de la session, si la session est perdue, elle redirige.

3

Nous avons ajouté le code suivant au fichier Global.asax.cs:

private void IsAuthenticated() 
    { 
     string vFileName = Path.GetFileName(HttpContext.Current.Request.Path); 
     string vExt = Path.GetExtension(vFileName).ToLower(); 
     if ((vFileName != "Login.aspx") && (vExt == ".aspx")) 
     { 
      if (HttpContext.Current.Session["LoggedIn"] == null) 
      { 
       HttpContext.Current.Response.Redirect("~/Login.aspx"); 
      } 
     } 
    } 
    void Application_PostAcquireRequestState(object sender, EventArgs e) 
    { 
     IsAuthenticated(); 
    } 

NS: La première ligne dans notre fichier Global .asax est:

<%@ Application Inherits="???.Global" Language="C#" %>