2010-12-10 39 views
12

Quel est le meilleur moyen de se déconnecter d'un utilisateur lorsqu'une session se termine ou expire?Comment se déconnecter d'un utilisateur lorsqu'une session expire ou se termine

Merci pour toute aide.

+1

Voulez-vous dire simplement d'avoir un utilisateur non authentifié, ou de rediriger l'utilisateur vers certains "Hé, vous avez expiré!" page après qu'ils ont attendu trop longtemps et que leur session a expiré? – Pandincus

+0

Les deux si possible? – zSynopsis

+0

lorsque la session se termine, la requête suivante qu'ils font sera non authentifiée. Dans ce cas, votre page peut vérifier cela lors du chargement d'une nouvelle page. Pour les rediriger s'ils ont été trop longtemps sur la même page, vous devez écrire javascript sur la page qui dispose d'un compte à rebours égal à la valeur du délai d'expiration de la session. Lorsque la minuterie atteint zéro redirection, car la session est invalide. (Kinda - une mise en garde est que si ils naviguent sur votre site dans un autre onglet - qui gardera la session en vie, tandis que le premier onglet javascript sera toujours à rebours) – Prescott

Répondre

11

Cela dépend vraiment de la fonctionnalité souhaitée que vous recherchez. Je vais supposer que vous utilisez FormsAuthentication.

Il y a deux choses distinctes dont vous avez besoin d'être préoccupé par: la session et le cookie FormsAuthentication. À moins que je me trompe, les deux ont des délais d'attente séparés.

Si le problème que vous rencontrez est que la session est expiré, mais l'utilisateur est authentifié, vous pouvez essayer encore une combinaison des éléments suivants:

1: Faire en sorte que le cookie d'authentification a la même valeur de délai d'attente comme la session:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: Dans votre événement Page_Load, vérifiez si la session a expiré:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Voir http://www.eggheadcafe.com/articles/20051228.asp pour plus d'informations sur la détection d'un délai de session)

Si vous voulez une expérience utilisateur plus agréable, vous pouvez utiliser javascript pour lancer une sorte de popup d'interface utilisateur modale après X minutes. Cette popup permettrait simplement à un utilisateur d'initier un clic-clic qui déclencherait une publication AJAX sur le serveur, étendant ainsi leur authentification et leur cookie de session sans qu'ils aient à recharger la page. Je n'ai jamais implémenté cela avant mais regardez, this guy made an ASP.NET AJAX control!

+0

Merci Pandincus – zSynopsis