2009-05-07 11 views
2

Je conserve une variable de session lorsque l'utilisateur est connecté. Pour que lorsque l'utilisateur clique sur btnLogout, il doit effacer toutes mes sessions et déconnecter l'utilisateur pour BON !!!Problème avec mes variables de session dans asp.net 2.0

Il efface mes sessions mais si je clique sur le bouton RETOUR dans IE juste après ma déconnexion alors je suis toujours connecté! Cela signifie qu'il revient à l'écran où l'utilisateur était encore connecté.

Mon code sur Déconnexion

protected void btnLogout_Click 
{ 
    Session.Clear(); 
    Session.Abandon(); 
    Session.RemoveAll(); 

    Response.Redirect("Home.aspx"); 
} 

Pourquoi est-ce et comment puis-je empêcher cela?

EDIT: est-il peut-être une option dans le code que je peux faire désactivera l'utilisateur d'appuyer sur la touche BACK dans le Web BrowZer?

+0

Peut-être pas lié: Il est préférable d'ajouter un second argument à true pour la redirection, afin de terminer l'exécution de la page après la redirection. Peut-être y a-t-il des variables de session utilisées dans les méthodes exécutées après la redirection mais qui ne terminent pas l'exécution de la page? –

+0

Que dois-je faire dans le code pour cela? – Etienne

Répondre

4

Vous pouvez mettre cela dans le Page_Init de votre maître:

Response.Cache.SetNoServerCaching(); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
Response.Cache.SetExpires(new DateTime(1900, 01, 01, 00, 00, 00, 00)); 

Ceci est, par exemple, ce que la plupart des sites bancaires font que vous ne pouvez pas utiliser efficacement le bouton de retour.

+0

Merci beaucoup !!!!! – Etienne

1

Le navigateur conserve un cache de la page, il suffit donc de faire une requête au serveur pour voir si vous êtes toujours connecté. Vous devrez utiliser HTTPS pour vous assurer que le cache est également protégé.

2

Il y a plusieurs façons dont vous pouvez dire au navigateur de ne pas mettre en cache la page soit à partir du code-behind, javascript ou par HTML en utilisant les éléments suivants sur la page

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 

Il aurait également été bonne pratique ajoutez votre événement page_load dans le code derrière le code pour vous assurer que la variable de session existe toujours.

+0

Merci, mais où dois-je placer ceci lorsque vous utilisez MasterPages? Dans ma MasterPage? – Etienne

+1

créer une page RequiresLogin et hériter de toutes les pages nécessaires à la connexion. Ou ajoutez-le simplement à la page MasterPage si toutes les pages enfants requièrent cette fonctionnalité. –

3

Est-ce vraiment un problème? Oui, ils peuvent voir leur page précédente comme elle a été mise en cache, mais dès qu'ils tentent de faire d'autres demandes légitimes dans ce contexte, elles échoueront à mesure que vos variables de session auront disparu. À moins d'avoir une raison très précise de coder autour de cela, vous résolvez un problème qui n'existe pas vraiment.

Questions connexes