Dans ASP.NET, Quand dois-je utiliser Session.Clear () plutôt que Session.Abandonner ()?

Les Deux Sessions.Clear() et Session.Abandonner() se débarrasser des variables de session. Si je comprends bien, Abandon() termine la session en cours et provoque la création d'une nouvelle session, provoquant ainsi le déclenchement des événements End et Start.

Il semble préférable d'appeler Abandon () dans la plupart des cas, comme déconnecter un utilisateur. Y a-t-il des scénarios où j'utiliserais Clear() à la place? Est-il beaucoup de différence en termes de performances?

108
demandé sur abatishchev 2008-12-07 11:14:50

5 réponses

Session.Abandon() détruit la session et le Session_OnEnd événement est déclenchée.

Session.Clear() juste supprime toutes les valeurs (contenu) de l'Objet. La session avec la même clé est toujours vivante.

Donc, si vous utilisez Session.Abandon(), vous perdez une session spécifique et l'utilisateur va obtenir une nouvelle clé de session. Vous pouvez l'utiliser par exemple lorsque l'utilisateur se déconnecte.

Utiliser Session.Clear(), si vous voulez que l'utilisateur reste dans la même session (si vous ne voulez pas que l'utilisateur de se reconnecter par exemple) et réinitialiser toutes les données spécifiques à la session.

162
répondu splattne 2013-09-26 20:42:06

Uniquement en utilisant Session.Clear() lorsqu'un utilisateur se déconnecte peut poser un trou de sécurité. Comme la session est toujours valide en ce qui concerne le serveur Web. C'est alors une question raisonnablement triviale de renifler, de saisir l'Id de session et de détourner cette session.

Pour cette raison, lors de la déconnexion d'un utilisateur, il serait plus sûr et plus judicieux d'utiliser Session.Abandon() afin que la session soit détruite et qu'une nouvelle session soit créée (même si la page de l'interface utilisateur de déconnexion ferait partie de la nouvelle session, la nouvelle la session n'aurait aucun des détails des utilisateurs et le détournement de la nouvelle session équivaudrait à avoir une nouvelle session, donc elle serait muette).

12
répondu shabbirh 2011-11-23 04:45:31

Je ne suis toujours pas sûr de ce qu'est un exemple réel où vous utiliseriez Session.Abondon(), Session.Clear().

Je peux comprendre...si l'utilisateur clique sur votre lien de déconnexion et que vous les apportez à votre page "vous avez été déconnecté"....leur session de navigateur se poursuit toujours, mais vous souhaitez supprimer les informations stockées dans la session. Si vous avez terminé la session, une nouvelle session sera créée immédiatement pour la page "vous avez été déconnecté".

5
répondu nick 2017-05-05 05:18:54

Session.Abandon détruit la session comme indiqué ci-dessus, vous devez donc l'utiliser lors de la déconnexion de quelqu'un. Je pense qu'une bonne utilisation de Session.Clear serait pour un panier sur un site de commerce électronique. De cette façon, le panier est effacé sans déconnecter l'utilisateur.

3
répondu Kasim Shafiq 2012-05-15 17:12:23

J'ai eu ce problème et j'ai essayé les deux, mais j'ai dû me contenter de supprimer des conneries comme "pageEditState", mais ne pas supprimer les informations utilisateur de peur de devoir le rechercher à nouveau.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
0
répondu MatthewMartin 2008-12-07 14:34:08