Conférence ASP 3 : Objet d'application et objet de session
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:58:17
Dans la leçon précédente, nous avons découvert la collection de données Form, la collection de données QueryString et la collection de données ServerVariables de l'objet Request. Avant de poursuivre l'étude suivante, il est recommandé de vous détendre d'abord, car l'objet Application qui sera présenté ensuite est relativement abstrait et vous ne pourrez peut-être pas distinguer les choses lorsque vous le comprendrez pour la première fois. N'oubliez pas : lorsque vous ne le trouvez pas, ne réfléchissez pas trop à ce qu'est l'objet Application ? Comme le dit le vieil adage, apprenez d’abord à l’utiliser.
1. Comprenez l'objet Application. Pour vous rafraîchir l'esprit, regardons une routine de compteur (vous devez l'exécuter pour la comprendre) :
Modifiez d'abord un fichier wuf16.htm :
<html>
<corps>
Exemple d'enregistrement du nombre de clics sur une page : <a href="wuf17.asp">wuf17.asp</a>
</corps>
</html>
Le code de wuf17.asp est le suivant :
<% @LANGUAGE = VBScript %>
<% 'wuf17.asp - Enregistrer le nombre de visites sur une certaine page (principe du compteur)
Option explicite
Dim CountWeb
CountWeb = Request.ServerVariables("SCRIPT_NAME")
'Cela garantit que chaque page a une variable unique pour éviter toute confusion
%>
<HTML><CORPS>
<%
Response.Write CountWeb & "<Br><Br>" & vbcrlf
Application.Lock 'Veuillez lire l'explication
Application(CountWeb) = Application(CountWeb) + 1 'Accumulateur, ajoutez 1 au nombre de clics
Application.UnLock
Response.Write "Le nombre total de clics sur cette page avant l'arrêt et le redémarrage du serveur WEB est de : " & Application(CountWeb)
%>
</BODY></HTML>
Lors de l'exécution de ce programme, pour la plupart des gens, il n'y a qu'une seule machine, qui est à la fois le serveur Web et le client. Vous ne pouvez alors qu'imaginer une situation comme celle-ci : vos deux fichiers de page d'accueil sont placés sur un serveur Web éloigné et un flot d'utilisateurs nationaux et étrangers y accèdent via des navigateurs. Une fois que chaque utilisateur clique, la valeur de Application(CountWeb) sera incrémentée de 1, et tant que le serveur stockant le fichier wuf17.asp n'est pas fermé, Application(CountWeb) continuera à s'accumuler. Mais notez que si le serveur est arrêté puis redémarré, l'application (CountWeb) recommencera à compter à partir de 0 (je suis confus, j'ai dit pourquoi le nombre de visites de ma page est toujours à un chiffre). Afin d'éviter ce genre de situation de comptage qui part toujours de zéro, vous devez enregistrer la valeur de l'application (CountWeb) avant l'arrêt du serveur et la retirer en cas de besoin la prochaine fois, afin qu'elle puisse être accumulée séquentiellement. pour ce faire, veuillez écouter Decompose après N fois.
La question suivante est : que signifient Application.Lock et UnLock ? Nous venons de supposer qu'un grand nombre d'utilisateurs visitent la page et que chaque clic de l'utilisateur entraînera une augmentation de l'application (CountWeb) de 1. Pensez-y, cela ne serait-il pas un gâchis (Quoi ! Je peux ? N'y pensez pas, ce doit être vous (vous seul êtes le seul à sponsoriser la page d'accueil), il doit donc y avoir une règle du premier arrivé, premier servi. Lorsqu'un utilisateur visite la page et doit modifier la valeur de Application (CountWeb), utilisez la méthode Lock pour la verrouiller afin d'empêcher d'autres utilisateurs de la modifier. Une fois la modification terminée, déverrouillez-la.
Avez-vous vu dans l'exemple ci-dessus que l'objet Application fournit des informations partagées (Application(CountWeb)) à tous les utilisateurs et qu'il est orienté vers tous les utilisateurs (l'accès de chaque utilisateur entraînera une augmentation du compteur de 1). L'objet Application a également deux événements, l'événement Application_OnStart et l'événement Application_OnEnd (ne vous y trompez pas, il s'agit simplement d'un concept de départ dans les langages de programmation orientés objet. La syntaxe lors de son utilisation est la suivante :
<SCRIPT LANGUAGE=VBScript RUNAT=Serveur>
Sous-Application_OnEnd
'Lorsque le serveur WEB sera fermé, l'événement Application_OnEnd sera activé
'C'est-à-dire que le programme exécutera le code placé ici
"Ainsi, avant l'arrêt du serveur, nous pouvons modifier la valeur de Application (CountWeb) dans wuf17.asp ici
'Enregistrez-le, par exemple dans un fichier texte.
Fin du sous-marin
Sous-application_OnStart
« Lorsque le premier utilisateur parcourt la page Web ASP, l'événement Application_OnStart sera activé, mais lorsque d'autres utilisateurs navigueront ultérieurement, cet événement ne se produira pas.
'C'est-à-dire que le programme exécutera le code placé ici
" Ainsi, la valeur de Application (CountWeb) enregistrée dans le fichier texte peut être lue ici.
Fin du sous-marin
</SCRIPT>
Ce qui suit est un exemple pour illustrer comment utiliser les événements. La fonction de ce programme est de compter le nombre total de clics sur toutes les pages du site.
Le code du fichier wuf18.asp (les autres fichiers de pages du site sont similaires à ce fichier) :
<% @LANGUAGE = VBScript %>
Option <% explicite
'Tous les fichiers de pages du site doivent inclure cette phrase <!--#include file="wuf19.asp"-->%>
<!--#include file="wuf19.asp"-->
<HTML><CORPS>
Le nombre total de visites sur toutes les pages du site avant l'arrêt et le redémarrage du serveur : <%= Application("CountAll") %>
</BODY></HTML>
Code du fichier wuf19.asp :
<%' wuf19.asp
Application.Lock
Application("CountAll") = Application("CountAll") + 1
Application.UnLock
%>
Les fichiers wuf18.asp et wuf19.asp sont placés dans le même répertoire. Code du fichier global.asa :
Remarque : Le gestionnaire d'événements doit être enregistré sous forme de fichier texte nommé "global.asa" et doit être placé dans le répertoire racine du chemin virtuel (généralement dans le même répertoire que le fichier index.htm ou default.htm, par exemple : Prenons ma machine comme exemple. En termes de chemins absolus, global.asa est placé sous c:InetPubhome, tandis que wuf18.asp et wuf19.asp sont placés sous c:InetPubhomeasp). chemin uniquement Un fichier global.asa est autorisé à exister.
<SCRIPT LANGUAGE=VBScript RUNAT=Serveur>
'global.asa - wuf18.asp Le nom du fichier dans le package de téléchargement est 18global.asa, qui doit être renommé lors de son utilisation.
Sous-application_OnStart
'Lorsque le premier utilisateur parcourt la page Web, définissez la valeur initiale du compteur sur 0.
'Lorsque d'autres utilisateurs navigueront à l'avenir, le code suivant ne sera plus exécuté.
Application.Lock
Application("CountAll") = 0
Application.UnLock
Fin du sous-marin
</SCRIPT>
Parcourez wuf18.asp pour afficher les résultats en cours d’exécution. Il semble qu'il ne soit pas difficile d'apprendre simplement à utiliser l'objet Application.
2. Comprenez l'objet Session. Avec l’objet Application précédent comme préfiguration, l’objet Session est beaucoup plus simple. Il est similaire à l'objet Application, sauf qu'il est uniquement utilisé pour enregistrer des informations relatives à un seul utilisateur. Il est orienté vers un seul utilisateur, nous pouvons donc utiliser l'objet Session pour stocker des informations sur un seul utilisateur.
Comme l'objet Application, l'objet Session possède également deux événements : l'événement Session_OnStart et l'événement Session_OnEnd. La syntaxe d'utilisation est similaire à celle de l'objet Application.
Il convient de mentionner qu'avant d'utiliser l'objet Session, vous devez confirmer que la fonction Cookie du navigateur est activée (le paramètre par défaut convient).
Voici un exemple. Les exigences pour le fichier global.asa sont les mêmes que ci-dessus, donc le global.asa dans l'exemple ci-dessus sera remplacé par le global.asa dans cet exemple.
<SCRIPT LANGUAGE=VBScript RUNAT=Serveur>
' global.asa - wuf20.asp Le nom du fichier dans le package de téléchargement est 20global.asa
Sous-Session_OnStart
Session("In") = Now 'La fonction obtient maintenant l'heure actuelle
Fin du sous-marin
Sous-Session_OnEnd
Session("Sortie") = Maintenant
Application.Lock
Application("Sortie") = Session("Sortie")
Application("Dans") = Session("Dans")
Application (« Sortie »).UnLock
Fin du sous-marin
</SCRIPT>
Fichier wuf20.asp :
<%@ Langage=VBScript %>
<HTML>
<CORPS>
<% 'wuf20.asp
Response.Write « Paramètres de délai d'attente par défaut : » & Session.Timeout & « Minutes<Br> »
Session.Timeout = 1
Response.Write "L'heure à laquelle vous êtes entré sur ce site :" & Session("In") & "<Br>"
Réponse.Écrivez « Veuillez actualiser cette page dans 1 minute » et « <Br><Br> »
si Not IsEmpty(Application("Out")) alors
Response.Write "La dernière fois que vous êtes entré sur ce site :" & Application("In") & "<Br>"
Response.Write "La dernière fois que vous avez quitté ce site :" & Application("Out") & "<Br>"
Response.Write "Durée de navigation (minutes) :" &_
Datediff("n",Application("In"),Application("Out")) & "<Br><Br>"
Fin si
si IsEmpty(Session("Out")) alors
Response.Write "La valeur de Session(""Out"") avant l'actualisation et après l'actualisation est vide" & "<Br>"
Fin si
%>
</CORPS>
</HTML>
Lorsque l'utilisateur navigue sur la page Web pour la première fois, l'événement Session_OnStart se produit. Le programme enregistre l'heure à laquelle l'utilisateur accède à la page Web. Cependant, l'événement Session_OnEnd ne se produit pas à ce moment-là, donc l'application ("Out"). la valeur est vide et le programme n’affiche pas le temps de navigation.
Nous savons que la durée de vie de l'objet Application s'étend du premier utilisateur parcourant la page Web jusqu'à l'arrêt du serveur. La durée de vie de l'objet Session s'étend de la première fois que l'utilisateur navigue sur la page Web (le début de la session) jusqu'à la fin de la session. Alors, quand se termine la séance ? Plus précisément dans cet exemple, Session.Timeout = 1 définit le délai d'expiration de la session sur 1 minute, c'est-à-dire que si aucune demande n'est fournie au serveur Web pendant 1 minute, la session expire, entraînant la fin de la session, l'événement Session_OnEnd se produit, et le programme exécute le code dans Session_OnEnd. Ici, nous mettons les heures d'entrée et de sortie respectivement dans Application("In") et Application("Out"), car après la fin de la session, l'objet Session n'existera plus. Nous l'avons vérifié à la fin du code.
De cette routine, nous pouvons voir :
1. Les objets Application et les objets Session ont des durées de vie différentes.
2. L'objet Session est destiné à un seul utilisateur et sa valeur est stockée sur le client. La navigation par d'autres utilisateurs n'a aucun impact sur l'objet Session mono-utilisateur. Un seul utilisateur ne peut lire et écrire que la valeur de son propre objet Session (par exemple : Session("In")).
3. Notez la représentation des guillemets doubles dans Response.Write: (""Out"").
4. Rappel spécial : ce programme n'a aucune fonctionnalité et est uniquement destiné au débogage (convient uniquement à la navigation par un seul utilisateur). Veuillez réfléchir à pourquoi ? La réponse se trouve à la fin de cet article.
Astuce : Veuillez prêter attention aux caractéristiques de l'objet Application.
3. Un exemple classique : Comment afficher le nombre de personnes en ligne sur une page Web Dans l'exemple suivant, Application ("En ligne") est utilisée pour stocker le nombre de personnes en ligne, et Application ("CountAll") est utilisée pour stocker. stocker le nombre total de visiteurs.
Principe : Lorsqu'un nouvel utilisateur parcourt la page Web, l'événement Session_OnStart se produit, le nombre d'utilisateurs en ligne augmente de 1, et le nombre d'utilisateurs visiteurs augmente également de 1. Lorsqu'un utilisateur quitte, l'événement Session_OnEnd se produit après l'expiration de la session et le nombre de personnes en ligne est réduit de 1.
Le code Global.asa est le suivant :
<SCRIPT LANGUAGE=VBScript RUNAT=Serveur>
'Global.asa-wuf21.asp
Sous-application_OnStart
Application.Lock
'Lisez la valeur initiale de Application("CountAll") ici
Application.UnLock
Fin du sous-marin
Sous-Session_OnStart
Application.Lock
Application("En ligne") = Application("En ligne") + 1
Application("CountAll") = Application("CountAll") + 1
Application.UnLock
Fin du sous-marin
Sous-Session_OnEnd
Application.Lock
Application("En ligne") = Application("En ligne") - 1
Application.UnLock
Fin du sous-marin
Sous-Application_OnEnd
Application.Lock
'Application("CountAll") doit être enregistrée dans le fichier ici
Application.UnLock
Fin du sous-marin
</SCRIPT>
Le code Wuf21.asp est le suivant :
<%@ Langage=VBScript %>
<HTML>
<CORPS>
<%Session.Timeout = 5%>
<P>Nombre de personnes en ligne : <%= Application("Online")%></P>
<P>Nombre total de visiteurs : <%= Application("CountAll")%></P>
</CORPS>
</HTML>
Veuillez noter que cette routine est comparée à wuf17.asp. Cette dernière compte le nombre de clics, tandis que la première compte le nombre de visiteurs.
Réponse : Puisque l'objet Application s'applique à tous les utilisateurs, dans le cas de multi-utilisateurs, la navigation des autres utilisateurs modifiera également les valeurs de Application ("In") et Application ("Out").