Est-il possible en utilisant ASP.NET pour exécuter toujours un code côté serveur lorsqu'un utilisateur feuilles une page?

StackOverflow https://stackoverflow.com/questions/4679573

Question

Je me demandais s'il y a un moyen d'utiliser toujours un code côté serveur lorsqu'un utilisateur quitte une page ASP.NET. L'événement Unload page est pas bon parce que ne pas appelée si quelqu'un clique sur un lien. Idéalement, je voudrais aussi que le code à exécuter même si l'utilisateur ferme le navigateur.

Je pense que je demande est pas possible, mais il ne fait pas de mal à demander

Était-ce utile?

La solution

Le problème est, HTTP est un protocole sans état, de sorte que lorsque la page a fini d'être servi, vous ne serez savoir si l'utilisateur est toujours sur la page ou non.

La seule façon de acheive ce serait un morceau caché de Javascript qui constamment pings le serveur avec son ID de session ou un autre mécanisme similaire. Lorsque le ping ne répond plus, vous pouvez raisonnablement présumer que la page n'est pas vue par l'utilisateur plus.

Voici un diagramme qui explique le flux de messages HTTP traditionnel.

text alt

Autres conseils

Je ne suis pas vraiment sûr si vous pouvez le faire, mais j'ai une solution de contournement à l'esprit. Il y a un événement dans le DOM appelé onbeforeunload. il reçois des appels chaque fois qu'un utilisateur quitte une page. vous pouvez envoyer une demande de paiement ajax au serveur de cette fonction.

La chose la plus proche vous pouvez venir sans créer trop salissant une solution est de permettre aux sessions de l'AEP. Cela va créer une session sur le serveur pour chaque visiteur, qui sera identifié par un cookie.

Après une certaine quantité d'inactivité du visiteur, la session sera fermée, et un événement SessionEnd sera élevé. Ce que vous pouvez brancher dans le fichier Global.asax.

Je ne recommande pas cet cependant, parce que HTTP est pr. définition d'un protocole de session moins, et en utilisant des sessions basées sur le serveur constitue une violation de ce fait, et sont souvent problématiques. De nombreuses solutions sessions basées sur le serveur d'utilisation rencontrent des problèmes lorsque l'utilisateur utilise le bouton retour du navigateur, et soumet à nouveau un formulaire. Parce que le contenu du formulaire soumis ne correspond plus aux données qui existe dans la session du serveur.

En outre, ce qui permet des sessions basées sur le serveur mal au sérieux l'évolutivité de l'application.

Pas que je sache. Vous aurez besoin d'utiliser javascript pour cela, et appeler un service web sur le côté serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top