2009-08-24 9 views
3

J'utilise le mode SQLServer SessionState pour stocker la session dans mon application ASP.NET. Il stocke certains objets qui sont sérialisés/désérialisés chaque fois qu'ils sont utilisés. Si j'apporte des modifications dans le code de la structure de ces objets et que je mets une nouvelle version en direct, tout utilisateur connecté recevra une erreur, car ses objets de session (les anciens de la version) ne correspondent pas à la structure nouvelle version attend tout en désérialisant.Comment effacer l'état de session SQL pour tous les utilisateurs dans ASP.NET

Existe-t-il un moyen d'effacer toutes les sessions à la fois dans la base de données afin que toutes les sessions actives expirent et que les utilisateurs soient obligés de se reconnecter (tous les objets de session sont créés)?

Ou ... Y at-il un autre moyen de résoudre cette situation?

+0

curiosité - pourraient utilisateurs effacer leurs cookies et résoudre ce problème? – Tim

+1

Ils pourraient, mais j'avais besoin d'une solution qui ne nécessite aucune action des utilisateurs –

Répondre

2

Vous pouvez appeler Session.Abandon ou Effacer pour chaque utilisateur lorsqu'il a frappé l'objet Session invalide.

Vous pouvez également parcourir la collection de sessions par utilisateur et effacer les clés pouvant contenir des «anciens» objets. Peut-être que vous avez un ticket de connexion et que vous ne voulez pas effacer.

foreach (string key in Session.Keys) 
{ 
    if (!key.Equals("login")) 
    { 
    Session.Remove(key); 
    } 
} 
13

Vous pouvez essayer d'utiliser la procédure stockée dans SQL Server pour effacer toutes les sessions:

CREATE PROCEDURE [dbo].[DeleteSessions] 
AS 
DELETE [ASPState].dbo.ASPStateTempSessions 

RETURN 0 
+0

Excellente solution, merci! mais je vais le gérer par le code –

Questions connexes