web-dev-qa-db-fra.com

Dans ASP.NET, quand devrais-je utiliser Session.Clear () plutôt que Session.Abandon ()?

Session.Clear () et Session.Abandon () suppriment les variables de session. Si j'ai bien compris, Abandon () met fin à la session en cours et entraîne la création d'une nouvelle session, entraînant ainsi le déclenchement des événements End et Start.

Il semble préférable d'appeler Abandon () dans la plupart des cas, par exemple pour déconnecter un utilisateur. Existe-t-il des scénarios dans lesquels j'utiliserais Clear () à la place? Y a-t-il beaucoup de différence de performance?

110
Lance Fisher

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

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

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

Utilisez Session.Clear(), si vous souhaitez que l'utilisateur reste dans la même session (si vous ne souhaitez pas que l'utilisateur se reconnecte par exemple) et réinitialise toutes les données spécifiques à la session.

165
splattne

Utiliser uniquement Session.Clear () lorsqu'un utilisateur se déconnecte peut poser un problème de sécurité. Comme la session est toujours valide en ce qui concerne le serveur Web. Il est alors relativement simple de renifler et de saisir l'identifiant de session et de détourner cette session.

Pour cette raison, lors de la déconnexion d'un utilisateur, il serait plus prudent et judicieux d'utiliser Session.Abandon () afin de détruire la session et de créer une nouvelle session (même si la page de l'interface utilisateur de déconnexion faisait partie de la nouvelle session). la nouvelle session ne contiendrait aucun des détails des utilisateurs et détourner la nouvelle session équivaudrait à avoir une nouvelle session, elle serait donc muette).

13
shabbirh

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

Je peux comprendre ... si l'utilisateur clique sur votre lien de déconnexion et que vous le dirigez vers la page "vous avez été déconnecté" .... la session de son navigateur se poursuit mais vous souhaitez supprimer les informations stockées dans la session. Si vous abandonnez la session, une nouvelle session sera immédiatement créée pour la page "vous êtes déconnecté".

5
nick

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

3
Kasim Shafiq

J'avais ce problème et j'ai essayé les deux, mais je devais me contenter d'enlever la merde comme "pageEditState", mais je ne retirais pas les informations utilisateur de peur que je ne doive le consulter à nouveau.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
0
MatthewMartin