Question

Je souhaite que les fonctionnalités de mon application permettent à un utilisateur de cocher sa volonté de rester connecté indéfiniment (en fixant arbitrairement l'expiration des cookies à 3 mois à compter de MAINTENANT).

Le code que j'ai pour traiter ceci est

private static HttpCookie GetFormsAuthenticationCookie(string userNameResponse, 
                                                        bool persistCookie)
{            
    var cookie = FormsAuthentication.GetAuthCookie(userNameResponse, persistCookie);

    if (persistCookie)
        cookie.Expires = DateTime.Now.AddMonths(3);

    return cookie;
}

private void LoginUser(string userNameResponse, bool PersistCookie)
{
    Response.Cookies.Add(GetFormsAuthenticationCookie(userNameResponse, PersistCookie));

    string navigateAfterUrl = FormsAuthentication.GetRedirectUrl(userNameResponse,
                                                                 PersistCookie);

    Response.Redirect(navigateAfterUrl);
}

Cependant, lorsque je reviens sur le site, je dois me connecter à nouveau ultérieurement. J'ai vérifié que le cookie revient avec ma date d'expiration et qu'il n'est pas défini comme un cookie de session (également testé avec le navigateur de fermeture / réouverture et le cookie existe toujours). Ma seule pensée est que cela a quelque chose à voir avec le moment où ASP.NET expire la session.

J'ai une configuration de clé d'ordinateur spécifique dans mon configuration Web. Le même cookie ne devrait-il pas fonctionner si IIS est redémarré, etc.? Quelqu'un a-t-il des suggestions sur ce qui pourrait être la cause de ceci ou au moins sur la façon de le retrouver plus loin puisque je ne peux penser à rien d'autre à faire?

Était-ce utile?

La solution

Lorsque vous appelez la méthode GetAuthCookie pour effectuer une FormsAuthenticationTicket est créé avec un délai d'attente donné par propriété Expiration dans web.config. Veillez donc à le configurer correctement:

<authentication mode="Forms">
  <forms
    loginUrl="/someloginUrl"
    requireSSL="true"
    protection="All"
    // This is the setting you are looking for! (it's in seconds)
    timeout="120"
    domain="example.com"
    slidingExpiration="false"
    name="cookieName" />
</authentication>

Une fois le ticket crypté, il est utilisé comme valeur pour le cookie. Lorsque vous définissez la propriété Expires de votre cookie à une valeur donnée cela indique qu'il sera conservé sur l'ordinateur client pour la période donnée. Ensuite, à chaque demande, le runtime ASP.NET vérifiera la présence du cookie, tentera de déchiffrer la valeur et obtiendra le ticket. Ensuite, il vérifiera si le ticket est toujours valide en utilisant la propriété Timeout. Ainsi, si vous avez un petit délai, quel que soit le cookie transmis, le ticket n’est plus valide et l’authentification échouera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top