2010-10-14 3 views
1

Salut
dans mes utilisateurs d'applications Web de connexion au site normalement et ils ont marqué dans le tableau d'utilisateur dans la base de données en tant qu'utilisateur en ligne Session_End je veux les déconnecter En Session_End je n'ai pas accès à HttpContext. Current.Session ou Session seulement ils sont tous deux null comment puis-je accéder à la variable de session à l'événement (Session_End).variable de session d'accès à Session_End

Répondre

1

Session_End ne fonctionne que si vous utilisez la gestion de session InProc. Peut-être que vous utilisez l'approche StateServer ou SqlServer?

+0

Non, je ne les ai pas utilisés, je travaille avec InProc – Ehsan

2

Si vous utilisez Session InProc (si l'événement se déclenche Session_End) vous pouvez utiliser

this.Session 

Lorsque vous utilisez le Global.asax, Global.asax s'étend HttpApplication

De MSDN (http://msdn.microsoft.com/pt-br/library/system.web.httpapplication.aspx):

« Cette classe est la classe de base pour les applications qui sont définies par l'utilisateur dans le fichier Global.asax. »

J'ai créé une méthode qui retourne à l'intérieur Global.asax la session:

public HttpSessionState GetSession() 
{ 
    //Check if current context exists 
    if (HttpContext.Current != null) 
    { 
     return HttpContext.Current.Session; 
    } 
    else 
    { 
     return this.Session; 
    } 
} 

Je peux donc utiliser la méthode suivante @ global.asax:

var x = GetSession()["key"]; 

Modifier

Toutefois, plusieurs instances d'application peuvent être générées pour gérer les demandes (vous pouvez définir travailleur ny traite que vous voulez dans

IIS > App Pools > Properties

Mais avec différents processus de travail la demande peut tomber sur l'un des nombreux processus de travail qui n'auront pas les informations de session que vous souhaitez

Voir ASP.NET session state and multiple worker processes

Je suggère de stocker le premier accès et le dernier accès enregistré (Post_Authenticate event).

En outre, utilisez un travail SQL Server exécuté périodiquement pour vérifier le dernier accès. De cette façon, vous pouvez empêcher le blocage de votre application (lorsque l'événement Session_End ne se déclenche pas).

Questions connexes