web-dev-qa-db-fra.com

Comment tuer une session ou un ID de session (ASP.NET/C#)

Comment puis-je détruire une session (Session ["Nom"]) lorsque l'utilisateur clique sur le bouton de déconnexion?

Je regarde la référence de l'API ASP.NET sur MSDN et il ne semble pas avoir beaucoup d'informations. Cela semble assez limité. Mais je ne trouve aucune autre page pour les classes ASP.NET, etc.

J'ai essayé:

Session.Abandon(); et Session.Contents.Remove("Name"); aucun d'eux ne fonctionne. (Je les ai trouvés dans un forum à partir d'une recherche Google)

30
anon271334

La méthode Abandon devrait fonctionner ( MSDN ):

Session.Abandon();

Si vous souhaitez supprimer un élément spécifique de la session, utilisez ( MSDN ):

Session.Remove("YourItem");

EDIT: Si vous voulez simplement effacer une valeur, vous pouvez le faire:

Session["YourItem"] = null;

Si vous souhaitez effacer toutes les clés, procédez comme suit:

Session.Clear();

Si aucun de ces éléments ne fonctionne pour vous, alors quelque chose de louche se passe. Je voudrais vérifier où vous affectez la valeur et vérifier qu'elle n'est pas réaffectée après avoir effacé la valeur.

Vérification simple:

Session["YourKey"] = "Test";  // creates the key
Session.Remove("YourKey");    // removes the key
bool gone = (Session["YourKey"] == null);   // tests that the remove worked
61
Kelsey

Il est également judicieux de demander au navigateur client d'effacer la valeur du cookie d'ID de session.

Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
8
Bozhidar Grigorov

Session.Abandon ()

Cela marque la session comme abandonnée, mais la session ne sera pas réellement abandonnée à ce moment, la demande doit d'abord être terminée.

5
Bob

D'après ce que j'ai testé:

Session.Abandon(); // Does nothing
Session.Clear();   // Removes the data contained in the session

Example:
001: Session["test"] = "test";
002: Session.Abandon();
003: Print(Session["test"]); // Outputs: "test"

Session.Abandon ne définit un indicateur booléen dans l'objet session que sur true. Le serveur Web appelant peut réagir à cela ou non, mais il y a PAS action immédiate provoquée par ASP. (Je l'ai vérifié moi-même avec le .net-Reflector)

En fait, vous pouvez continuer à travailler avec l'ancienne session, en appuyant une fois sur le bouton de retour du navigateur et continuer à naviguer normalement sur le site Web.

Donc, pour conclure ceci: utilisez Session.Clear () et économisez la frustration.

Remarque: j'ai testé ce comportement sur le serveur de développement ASP.net. Le réel IIS peut se comporter différemment.

3
Chuck

Session.Abandon(); ne fonctionnait pas non plus pour moi.

La façon dont je devais l'écrire pour le faire fonctionner était comme ça. Pourrait aussi fonctionner pour vous.

HttpContext.Current.Session.Abandon();
1
kinthamen

Session.Abandon() cela détruira les données.

Remarque, cela ne supprimera pas nécessairement le jeton de session d'un utilisateur, et ce même jeton de session à un stade ultérieur pourrait être récupéré et créé en tant que nouvelle session avec le même identifiant, car il est considéré comme un jeu équitable à utiliser.

1
Chris Marisic

Vous tuez une session comme celle-ci:

Session.Abandon()

Si toutefois vous souhaitez simplement vider la session, utilisez:

Session.Clear()
1
Chris Cashwell
Session["YourItem"] = "";

Fonctionne très bien dans les pages Web de rasoir .net.

1
orf
Session.Abandon()

est ce que vous devez utiliser. la chose est dans les coulisses asp.net détruira la session mais donnera immédiatement à l'utilisateur une nouvelle session à la demande de page suivante. Donc, si vous vérifiez si la session a disparu juste après avoir appelé abandon, il semblerait que cela n'ait pas fonctionné.

1
Alan Barber