web-dev-qa-db-fra.com

Comment générer un nouvel ID de session

Est-il possible de générer un nouvel ID pour la session en utilisant ASP.NET?

Je souhaite que cela change lorsque quelqu'un se connecte à mon site Web juste avant de définir ses variables de session initiales.

21
Luke

Vous pouvez le faire en utilisant la classe SessionIdManager :

SessionIDManager manager = new SessionIDManager();

string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);

[L'échantillon de code provient de article d'Anas Ghanem]

25
stuartd

vous pouvez utiliser

SessionIDManager.CreateSessionID Method : renvoie un identifiant de session unique qui est un nombre généré de manière aléatoire codé dans une chaîne de 24 caractères.

Code

SessionIDManager Manager = new SessionIDManager(); 
string NewID = Manager.CreateSessionID(Context); 
string OldID = Context.Session.SessionID;
bool redirected = false;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded);

Ici vous pouvez trouver tous les détails sur hsi: Modification de l'ID de session par programme.

4
Pranay Rana

oui, il est possible de générer un nouvel ID pour la session. ci-dessous est un exemple

SessionState.SessionIDManager Manager = new SessionState.SessionIDManager(); 
string NewID = Manager.CreateSessionID(Context); 
string OldID = Context.Session.SessionID; 

bool IsAdded = false; 
Manager.SaveSessionID(Context, NewID, false, IsAdded); 

Response.Write("Old SessionId Is : " + OldID); 
if (IsAdded) { 
    Response.Write("<br/> New Session ID Is : " + NewID); 
} 
else { 
    Response.Write("<br/> Session Id did not saved : "); 
} 
3
user1102001

L'infrastructure de gestion de session ASP.Net n'expose pas un moyen pris en charge pour modifier votre identifiant de session lors du traitement d'une demande. Si l'écriture de code pris en charge est importante pour vous, il y a plusieurs choses à savoir avec la réponse acceptée.

  • CreateSessionID et SaveSessionID sont tous deux marqués "Cette méthode n'est pas destinée à être appelée à partir du code d'application".
  • Le fournisseur SessionID est un type enfichable (voir par exemple Implémentation d'un SessionIDManager personnalisé ), donc vous devrez au moins instancier le type correct.
  • L'état de session attaché à HttpContext restera associé à l'ID de session initial, donc tout ce que vous mettrez dans le sac d'état de session semblera être perdu. Puisqu'il n'y a rien que vous puissiez faire avec la session une fois que vous avez changé votre identifiant, il est inutile de changer votre identifiant de cette façon.

Malheureusement, il n'y a pas de moyen pris en charge pour le faire sans aller-retour. Ce que vous devez faire est d'effacer le cookie d'état de session lorsque vous générez le formulaire de connexion. Lorsque l'utilisateur soumet le formulaire, le framework appelle le SessionIDManager pour en générer un nouveau. L'effacement correct du cookie de session est légèrement plus compliqué que la plupart des exemples de code ne le montrent. Le nom du cookie est un autre paramètre configurable dans le web.config. Vous devez le lire dans la configuration en accédant à la propriété:

((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName

Le cookie d'ID de session n'est pas limité à l'application, donc s'il y a deux applications installées sur le même serveur, il est souvent souhaitable de les faire utiliser des noms de cookies différents, donc cela est requis plus souvent que vous ne le pensez.

3
bmm6o

Je suppose que c'est lié à la sécurité? Une Session.Clear() ou Session.Abandon() fonctionnera-t-elle pour vous? Ceci est un bon SO lien lié à ces méthodes.

Sinon, c'est difficile car le cookie de session ASP.NET est déjà sur le navigateur de l'utilisateur. Vous pourriez ne pas avoir confiance que la session a vraiment changé.

2
Davin Tryon