Concernant le glissement de l'expiration de ASP.NET's formes d'authentification et de session

Nous avons une ASP.NET 4.5 WebForms application à l'aide des formes natives d'authentification et de session de la fonctionnalité. Les deux ont un délai d'attente de 20 minutes avec le glissement de l'expiration.

Imaginez le scénario suivant. Un utilisateur a travaillé dans notre application pendant un certain temps et puis continue à faire d'autres choses, en laissant notre application inactif pendant 20 minutes. Ensuite, l'utilisateur retourne à notre demande de rédiger un rapport. Toutefois, lorsque l'utilisateur tente d'enregistrer, il/elle est traitée avec l'écran de connexion, et le rapport est perdu.

Évidemment, c'est non. Au lieu de ce scénario, nous voulons que le navigateur sera redirigé vers la page de connexion le moment soit de l'authentification ou de la session a expiré. Pour réaliser cela, nous avons construire une Api Web service qui peut être appelé à vérifier si c'est le cas.

public class SessionIsActiveController : ApiController
{
    ///<summary>
    ///Gets a value defining whether the session that belongs with the current HTTP request is still active or not.
    ///</summary>
    ///<returns>True if the session, that belongs with the current HTTP request, is still active; false, otherwise./returns>
    public bool GetSessionIsActive()
    {
        CookieHeaderValue cookies = Request.Headers.GetCookies().FirstOrDefault();
        if (cookies != null && cookies["authTicket"] != null && !string.IsNullOrEmpty(cookies["authTicket"].Value) && cookies["sessionId"] != null && !string.IsNullOrEmpty(cookies["sessionId"].Value))
        {
            var authenticationTicket = FormsAuthentication.Decrypt(cookies["authTicket"].Value);
            if (authenticationTicket.Expired) return false;
            using (var asdc = new ASPStateDataContext()) //LINQ2SQL connection to the database where our session objects are stored
            {
                var expirationDate = SessionManager.FetchSessionExpirationDate(cookies["sessionId"].Value + ApplicationIdInHex, asdc);
                if (expirationDate == null || DateTime.Now.ToUniversalTime() > expirationDate.Value) return false;
            }
            return true;
        }
        return false;
    }
}

Cette Api Web service est appelé toutes les 10 secondes par le client pour vérifier si l'authentification ou la session a expiré. Si oui, le script redirige le navigateur vers la page de connexion. Cela fonctionne comme un charme.

Cependant, l'appel de ce service déclenche le glissement de l'expiration de l'authentification et de session. Donc, essentiellement, la création de jamais de fin d'authentification et de session. J'ai mis un point d'arrêt au début du service pour vérifier si il est l'un de nos propres fonctions qui déclenche cette. Mais ce n'est pas le cas, il semble se produire quelque part plus loin dans ASP.NET avant l'exécution de la prestation.

  1. Est-il un moyen de désactiver le déclenchement de ASP.NET s'authentification et de session de glissement expirations pour une demande spécifique?
  2. Si non, quelles sont les meilleures pratiques pour s'attaquer à un tel scénario?
La meilleure pratique serait de cesser d'utiliser côté serveur sessions. Ils sont fondamentalement brisé concept sur le web.
Je suis conscient de cela, et nous sommes en train de considérer l'élimination de la session d'utilisation, mais même dans ce parfait sessionless monde, le problème serait toujours pour le ticket d'authentification...
Pas vraiment. Lorsque l'utilisateur-les agents sont autorisés à faire de la auth poignée de main correctement, l'utilisateur ne perd pas de leur état actuel. C'est le navigateur rediriger vers un formulaire de connexion qui provoque la perte de leur travail.
C'est malheureusement la façon dont les formes d'authentification dans ASP.NET les œuvres, lorsqu'un auth ticket expire le user-agent est toujours redirigé vers un autre, prédéfinis page. Vos suggestions fondamentalement suggèrent que nous n'utilisons pas ASP.NET's formes d'authentification et de session (qui, je vous donne, a un certain mérite à elle). Toutefois, dans l'intérêt de ne pas avoir de revoir notre cadre de ce diplôme, je suis toujours intéressé à la réponse à ma première question.
nous n'essayons pas de les empêcher d'expiration pour des demandes spécifiques. Nous voulons éviter le renouvellement de l' coulissantes expiration pour les demandes spécifiques (qui n'ont pas encore expiré).

OriginalL'auteur maartendekker | 2013-01-31