2009-08-11 9 views
1

J'ai une méthode que j'ai besoin d'exécuter sur Session_end. Est-il possible que je puisse m'assurer que le code s'exécute lorsqu'un utilisateur ferme son navigateur? Cela peut être un queston dup. J'ai vu une réponse faire un appel à ajax décharger ou quelque chose, mais je ne veux pas que cela se déclenche chaque fois qu'un utilisateur navigue loin d'une page, juste quand ils ferment leur navigateur.Code Session_End sur le navigateur fermer

Merci, ~ ck

+2

ASP.NET L'état de la session n'a rien à voir avec le moment ou si l'utilisateur ferme le navigateur. –

+3

Notez également que Session_End déclenche uniquement le mode In-Proc – TWith2Sugars

Répondre

2

Réponse simple: Vous ne pouvez pas contrôler le navigateur de l'utilisateur. La solution AJAX que vous avez mentionnée est la plus proche de vous (sans plugin/client personnalisé). Imaginez qu'un site Web puisse suivre chaque fois que vous avez ouvert et fermé la fenêtre de votre navigateur. Ne pensez-vous pas que ce serait un problème de confidentialité?

La vérité réside dans la nature sans état de HTTP. Le serveur Web est hors de l'image dès qu'il a fini d'envoyer la réponse au client. Après cela, tout ce sur quoi vous pouvez compter est un script côté client (qui s'exécute uniquement parce que le client le souhaite, et il peut facilement choisir de ne pas exécuter de scripts.)

2

Session_end n'est pas fiable. Peut importe ce que vous faites. La session_end se déclenche uniquement lorsque vous utilisez la session inprocess.

Si vous utilisez un serveur d'état de session ou une session SQL, session_end ne se déclenche pas.

Lors de l'utilisation dans une session de processus, session_end se déclenche uniquement si vous avez stocké un élément dans la session. Si vous n'utilisez pas session, session_end ne se déclenchera jamais.

Si vous utilisez la session et que l'utilisateur ferme le navigateur, session_end se déclenche lorsque la session des utilisateurs expire. Bien qu'il contienne les mêmes paramètres que la session d'origine, cet événement ne sera pas lié à un navigateur, car c'est le processus de travail qui détecte le délai d'expiration de la session et déclenche le processus session_end.

+0

Si tel est le cas, il ne se trouve pas entre le navigateur et le serveur. Une fois la session terminée, nous pouvons compter sur Session_end pour tirer quelque part dans un proche avenir. Donc, si j'ai un int statique de compteur, je peux compter combien de sessions sont encore actives. – Bergkamp

+0

Ce compteur sera généralement sur le côté élevé. Il comprendra les sessions des utilisateurs qui ont fermé leur navigateur mais dont la session n'a pas encore expiré. –

+0

Si vous pouviez expliquer s'il vous plaît sur "High side". En outre, je suis en train de créer une application de chat sur mon site et j'aimerais avoir une liste statique d'utilisateurs afin que je puisse récupérer tous les noms et identifiants. Donc, savoir un peu plus tard que l'utilisateur a signé n'est pas si mauvais. non? – Bergkamp

Questions connexes