2009-04-20 7 views
2

Je veux connaître le nombre de sessions simultanées à un moment donné. Mais avec les araignées et les équilibreurs de charge et peut-être des influences qui ne savent pas, comment est-il sûr de le faire dans asax mondiale:Comment compter en toute sécurité les sessions: est-ce que Session_Start/End dans Global.Asax est suffisamment sécurisé?

void Session_Start(object sender, EventArgs e) 
{ 
    counter++; 
} 

void Session_End(object sender, EventArgs e) 
{ 
    counter--; 
} 

Des conseils?

Répondre

1

Si vous gardez la session stockée dans un serveur de base de données ou un serveur d'état, l'événement Session_End ne sera pas déclenché. Sinon, je pense qu'il ne devrait pas y avoir de problèmes.

également tout en incrémentant/décrémentant un compteur, vous devrez obtenir un verrou sur un objet comme celui-ci -

lock(<some shared object>) 
{ 
    counter++; 
} 

Vous pouvez également essayer de jeter un oeil à this.

+1

Verrouillage de l'objet d'application 'global.asax'? C'est un non-non absolu dans une application ASP.NET! –

2

À tout le moins, cette solution a un problème de filetage (à côté d'autres problèmes qui pourraient affecter vous vous l'avez mentionné et je ne couvre pas):

La tâche d'augmentation et de diminution doit être effectuée de manière atomique en utilisant Interlocked.Increment et Interlocked.Decrement au lieu de ++ ou --.

+0

Changé l'extrait de code maintenant. – Kirtan

Questions connexes