Fin de la Session dans Global.asax.cs ne s'exécute pas au moyen de formulaires authentification

j'ai un asp.net 4.0 application qui utilise l'authentification forms réglée à un délai de 45 minutes. Je voudrais rediriger l'utilisateur vers une page de timeout lorsque la session est Expirée. Quelqu'un peut me dire comment faire cela? Je suis en cours d'exécution .net 4.0.

web.config a:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="~/Login.aspx"
    defaultUrl="~/Default.aspx" protection="All" timeout="45"
    requireSSL="false">
  </forms>
</authentication>

Global.asax.le fichier cs a:

void Session_End(object sender, EventArgs e)
{
    Response.Redirect("~/Timeout.aspx");
}  
1
demandé sur capdragon 2010-12-15 21:12:22

3 réponses

il n'est pas possible de faire une redirection dans la méthode Session_End . Il ne s'exécute pas à la suite d'une requête, donc il n'a pas d'objet Response et il n'y a pas de réponse pour rediriger n'importe où.

il n'est pas possible de faire quoi que ce soit dans le navigateur suite à l'expiration de la session. Le protocole HTTP est orienté requête, il n'y a donc aucun moyen de pousser un message du serveur vers le navigateur sans que le navigateur le demande.

le le navigateur ne peut pas savoir si la session a expiré ou non. Si vous sondez le serveur pour vérifier si la session est Expirée, cela maintiendrait la session en vie, ce qui irait à l'encontre du but de la timeout.

vous pouvez faire une redirection après 45 minutes en utilisant juste le script client:

window.setTimeout(function() {
  window.location.href = '/Timeout.aspx';
}, 1000*45*60);

cependant, cela fera la redirection seulement basée sur le temps depuis que cette fenêtre de navigateur a contacté le serveur pour la dernière fois. Si vous avez plus d'une fenêtre de navigateur pour la même session, il est possible que la session n'ait pas été chronométrée.

4
répondu Guffa 2010-12-15 18:26:24

comment votre session est-elle implémentée? Session_End ne fonctionne que lorsque vous utilisez InProc.

voir http://www.eggheadcafe.com/articles/20021016.asp

3
répondu Paula Bean 2010-12-15 18:16:33

sur MVC vous pouvez ajouter ce code dans _ViewStart.CSHTML

_ViewStart.cshtml:

@{
     Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      

     if(Session.IsNewSession)  
         Response.Redirect(“Logout.aspx");// or another page which you want.
}

Comment faire pour Rediriger sur la Fin de la Session

0
répondu A. Morel 2017-05-23 11:45:41