2010-12-07 3 views
0

Je souhaite demander à l'utilisateur de laisser 2 minutes dans le délai d'expiration de la session. Si l'utilisateur appuie sur Oui il actualise sa session en cours sans perdre les données de formulaire si l'utilisateur sélectionne Non puis il déconnecte sa session. Je veux savoir comment capturer qu'il reste deux minutes et comment actualiser la session en cours sans perdre les données de formulaire. Im using Asp.Net MVC 2 avec JQuery, Une chose plus Im n'utilisant pas l'authentification de formeConfirmation du délai d'expiration de la session dans Asp.Net MVC 2

+0

De quelle session parlez-vous? Est-ce le HttpSession? L'expiration glissante est-elle activée? Qu'entendez-vous par * déconnecter sa session *? –

Répondre

1

Eh bien, la session est actualisée après chaque demande. Vous pouvez trouver le délai d'attente de session sur Session.Timeout. Vous pourriez faire quelque chose comme ça dans votre masterpage:

<script type="text/javascript"> 
function keepAlive() { 
    window.clearTimeout(window.sessionKeepAlive); 
    window.sessionKeepAlive = window.setTimeout(function() { 

     if(confirm('refresh session?')) { 
      // submit ajax request 
     } else { 
      // logout 
     } 

    }, <%= (Session.Timeout - 2) * 60 * 1000 %>); 
} 

keepAlive(); 
</script> 

Ensuite, vous devez réinitialiser le délai d'attente à chaque rappel complet AJAX, si vous utilisez AJAX:

$(document).ajaxComplete(keepAlive); 

Il sera difficile pour obtenir ce 100% fiable. Vous devez vous assurer que la requête AJAX dans le rappel de confirmation touche réellement le serveur d'état, et que vous devez gérer ce qui se passe lorsque cette requête AJAX échoue. Ce sont les choses qui pourraient faire expirer votre session même si vous avez ce script.

L'autre côté de la pièce est l'endroit où cela apparaîtra plus souvent que nécessaire. Par exemple, si vous ajoutez une image au DOM via javascript et que la récupération de cette image touche votre état, cette requête ne réinitialisera pas le délai d'attente JavaScript, bien que la session ait été actualisée.