2009-04-30 8 views

Répondre

4

Dans Session_Start, vous pouvez configurer tout ce qui est pertinent pour une session, cela dépend beaucoup de l'application.

En général, vous devriez éviter Session_End si possible, non seulement il se déclenche généralement très tard (après une session timeout) mais dans une configuration multi-serveur, il ne se déclenche pas du tout.

Pour plus de détails, voir le tag SessionState dans Web.config

+0

+1 pour indiquer d'éviter Session_End –

1

L'exemple le plus courant est le comptage des utilisateurs en ligne. Incrémenter le compte sur Session_Start et le contraire sur Session_End.

2

Session_Start Collecte toutes les informations utilisateur et stockage dans la base de données. Préparation du système pour l'utilisateur comme fichier temporaire, fichier mis en cache.

Session_End Enregistrement de l'état de l'utilisateur dans la base de données. Système de nettoyage et etc.

4

Il est toujours bon de nous rappeler pourquoi nous ne devrions jamais utiliser Session_End

excert de Understanding session state modes + FAQ


  1. événement est Session_End seulement supporté en mode InProc.
  2. Session_End ne sera pas déclenchée si vous fermez votre navigateur. HTTP est un protocole sans état , et le serveur n'a aucun moyen de savoir si le navigateur a fermé ou non.
  3. Session_End sera uniquement déclenchée:
    (a). Après n minutes d'inactivité (n = valeur de temporisation),
    ou
    (b). Si quelqu'un appelle Session.Abandon().
  4. Pour le cas (a) (point 3), Session_End sera exécuté par un thread d'arrière-plan, , ce qui implique: (a). Votre code dans Session_End est en cours d'exécution à l'aide du compte de processus de travail. Vous pouvez avoir un problème d'autorisation si vous accédez à une ressource telle que la base de données . (b). Si une erreur se produit dans Session_End, elle échouera silencieusement.
  5. Pour le cas (b) (point 3), afin que Session_End soit déclenché , votre état de session doit d'abord exister. Cela signifie que vous devez stocker certaines données dans l'état de la session et avoir effectué au moins une requête.
  6. De nouveau pour le cas (b) (Point3), Session_End sera appelée seulement si la session abandonnée est effectivement trouvée. Par conséquent, si vous créez et abandonnez une session à l'intérieur de la même requête, car la session n'a pas été enregistrée et ne peut donc pas être trouvée, Session_End ne sera pas appelée. Ceci est un bug dans .NET Framework 1.0 et 1.1.
Questions connexes