Accueil > .Net, ASP.Net, C#, MVC2 > [C#4 MVC2] Timeout de session

[C#4 MVC2] Timeout de session

Il y a plusieurs moyens de gérer le timeout de session, du moins j’en ai trouvé plusieurs.

Ceci dit, j’ai préféré la solution simple mais efficace qui consiste à utiliser un controller « parent » dont tous les autres controllers vont hériter.

Donc, j’ai ma classe BaseController, une classe abstract dont héritent tous mes controllers.

Mais j’y mets quoi dedans ???

J’utilise la méthode OnActionExecuting(ActionExecutingContext).

La description de la MSDN est la suivante : « Méthode appelée avant la méthode d’action.»

Donc, voici la méthode que j’ai utilisée :

/// <summary>
/// Evènement appelé avant l'invocation de l'action.
/// </summary>
/// <param name="filterContext">Informations sur la requête et l'action en cours.</param>
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // La session existe
    if (filterContext.HttpContext.Session != null)
    {
        // L'utilisateur n'est pas connecté
        if (ContextHelper.GetSessionValue<UserModel>(ContextHelper.SessionKeys.SessionCurrentUser) == null)
        {
            // Redirection vers la page par défaut
            filterContext.Result = RedirectToAction("Index", "Home");
            return;
        }

        // C'est une nouvelle session
        if (filterContext.HttpContext.Session.IsNewSession)
        {
            string cookie = filterContext.HttpContext.Request.Headers["Cookie"];
            // Le cookie existe et que le numéro de session est plus grand que 0
            if ((cookie != null) &&
                (cookie.IndexOf("ASP.NET_SessionId") >= 0))
            {
                // Redirection vers la page d'expiration de session
                filterContext.Result = RedirectToAction("SessionExpired", "Home");
                return;
            }
        }
    }
    // Sinon, on continue
    base.OnActionExecuting(filterContext);
}

J’ai juste ajouter le contrôle sur le user en session qui ne doit pas être null, mais le cas du site sur lequel ça a été utilisé est un peu particulier. En effet, le site est protégé par SSO et c’est lui qui gère l’authentification. Du coup, en pratique, si l’utilisateur est null, je n’ai pas une redirection, mais une récupération des entête HTTP pour loguer l’utilisateur (qui doit ainsi se loguer en arrivant sur la page qu’il voulait, quelle qu’elle soit).

Catégories :.Net, ASP.Net, C#, MVC2
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :