Lorsque vous utilisez ASP pour écrire des communautés virtuelles, des achats en ligne et d'autres programmes, les objets Application et Session jouent un rôle décisif et peuvent être utilisés de manière flexible et rationnelle.
Cet objet est la clé pour améliorer la qualité du programme. Permettez-moi de vous donner une introduction approfondie à ces deux objets intégrés d'ASP, basée sur mon expérience dans ce domaine.
1. Présentation des membres de l'objet Application
Les membres d’objet Application incluent des collections d’objets Application, des méthodes et des événements.
⒈Une collection d'objets Application
Collection de contenu : collection de toutes les variables stockées dans l'objet Applicaiton qui ne sont pas définies à l'aide de l'élément <OBJECT>.
StaticObjects : une collection de toutes les variables stockées dans l'objet Application défini à l'aide de l'élément <OBJECT>
Exemple : il y a l'affectation suivante dans default.asp
application(a)=a
demande(b)=128
application(c)=faux
Ensuite, il y a la collection de contenus
application.contents(1)=a 'peut également être écrit comme application.contents(a)=a
application.contents(2)=128 'peut également être écrit sous la forme application.contents(b)=128
application.contents(3)=false 'peut également être écrit comme application.contents(c)=false
L'auteur vous recommande ici d'utiliser une méthode telle que application.contents(a) lors de l'appel, car elle est plus intuitive. Si elle est représentée par un numéro de série,
Considérez l’ordre d’affectation.
⒉Méthodes d'objet Application
Contents.Remove (nom de la variable) : supprime la variable spécifiée de la collection Application.Contents
Contents.RemoveAll() : supprime toutes les variables de la collection Application.Contents
Lock() : verrouille l'objet Application afin que seule la page ASP actuelle puisse accéder au contenu.
Unlock() : Déverrouillez l'objet Application
Exemple : dans default.asp :
application(a)=a
demande(b)=128
application(c)=faux
réponse.write application.contents(1)&<br>
réponse.write application.contents(2)&<br>
réponse.write application.contents(3)&<br>
réponse.write Après la suppression de b :
application.contents.remove(b)
réponse.write application.contents(1)&<br>
réponse.write application.contents(2)&<br>
Résultat de l'exécution :
un
128
FAUX
Après la suppression de b :
un
FAUX
Si vous souhaitez supprimer toutes les variables de la collection, utilisez simplement application.contents.removeall Quant aux méthodes Lock et Unlock, elles sont souvent utilisées en pratique.
Le lecteur le connaît également, ce ne sera donc pas un fardeau ici.
⒊Événement d'objet d'application
OnStart : se produit lorsque le premier utilisateur accédant au serveur accède à une page pour la première fois.
OnEnd : se produit lorsque la session du dernier utilisateur est terminée et que tous les codes de l'événement OnEnd de la session ont été exécutés, ou lorsque le dernier utilisateur accède
Le serveur se produit après une période (généralement 20 minutes) pendant laquelle personne n'accède au serveur.
Si vous souhaitez définir quoi faire dans les événements OnStart et OnEnd de l'objet application, vous devez écrire le code dans le fichier Global.asa (exemples ci-dessous), et
Et placez le fichier dans le répertoire racine du site (généralement Inetpubwwwroot)
2. Aperçu des membres de l'objet Session
Les membres de l'objet Session ont un attribut de plus que l'objet Application, à savoir : les collections, les propriétés, les méthodes et les événements.
⒈Collection d'objets de session
Contenu : une collection de toutes les variables stockées dans un objet Session spécifique qui ne sont pas définies à l'aide de l'élément <OBJECT>.
StaticObject : une collection de toutes les variables définies à l'aide de l'élément <OBJECT> et stockées dans l'objet Session.
Exemple : il y a l'affectation suivante dans default.asp
session(a)=a
séance(b)=128
session(c)=faux
Ensuite, il y a la collection de contenus
session.contents(1)=a 'peut également être écrit sous la forme session.contents(a)=a
session.contents(2)=128 'peut également être écrit sous la forme session.contents(b)=128
session.contents(3)=false 'peut également être écrit sous la forme session.contents(c)=false
⒉Propriétés de l'objet Session
Page de code : lisible/inscriptible. Type entier. Définit la page de codes utilisée pour afficher le contenu de la page dans le navigateur. Une page de codes est le jeu de caractères de valeurs numériques que différentes langues utilisent
Différentes pages de codes. Par exemple, la page de codes ANSI est 1252, la page de codes japonaise est 932 et la page de codes chinois simplifié est 936.
LCID : Lisible/Écrivant. Type entier. Définit l'identifiant des paramètres régionaux de la page envoyé au navigateur. LCID est une abréviation standard internationale qui identifie de manière unique une région, par ex.
2057 définit le symbole monétaire de la région actuelle comme £.
ID de session : lecture seule. Type long. Renvoie l'identifiant de session pour cette session. A chaque création de session, un identifiant est automatiquement attribué par le serveur. peut être basé sur cela
La valeur détermine lequel des deux utilisateurs accède en premier au serveur.
Délai d'expiration : Lisible/Écrivant. Type entier. Définit un délai d'expiration en minutes pour la session. Si l'utilisateur n'actualise pas ou n'en demande aucune dans ce délai
page Web, la session générée par l'utilisateur se terminera automatiquement. La valeur par défaut est 20.
Les attributs ci-dessus sont de peu d'utilité dans les applications réelles et n'ont fondamentalement pas besoin d'être modifiés. Ces attributs n'ont rien de spécial.
⒊Méthodes d'objet Session
Contents.Remove (nom de la variable) : supprime la variable spécifiée de la collection Session.contents
Contents.Removeall() : supprime toutes les variables de la collection Session.contents
Abandon() : terminez la session utilisateur en cours et détruisez l'objet Session en cours.
Les méthodes Contents.Remove (nom de la variable) et Contents.Removeall() de l'objet Session sont fondamentalement les mêmes que celles de l'objet Application.
Pour vous aider à comprendre, vous pouvez vous référer à l'exemple ci-dessus pour changer l'application en session. Ce que je veux expliquer ici, c'est Contents.Removeall() et Abandon()
La différence est que l'exécution de ces deux méthodes libérera le fichier actuel.
Toutes les variables de session de la session utilisateur. La différence est que Contents.Removeall() libère simplement la valeur de la variable de session sans mettre fin à la session en cours.
En plus de libérer la variable Session, Abandon() mettra également fin à la session et déclenchera l'événement Session_OnEnd. J'espère que tout le monde fera attention à la différence entre les deux.
⒋Événements de l'objet Session
OnStart : déclenché lorsqu'une session utilisateur ASP est générée. Cet événement est généré dès qu'un utilisateur demande une page à ce serveur.
OnEnd : Déclenché à la fin de la session utilisateur ASP. Cet événement sera également déclenché lorsque la méthode Abandon() ou le délai d'attente est utilisé.
Ces deux événements sont identiques aux événements OnStart et OnEnd de l'Application et doivent être placés dans le fichier Global.asa.
Concentrons-nous sur l’étude de l’utilisation de ces quatre événements avec vous.
3. Global.asa
Les objets Application et Session d'ASP incarnent une fonctionnalité que les autres objets intégrés ASP n'ont pas : les événements. Chaque fois qu'un visiteur accède au serveur, un
Événements OnStart (le premier visiteur déclenchera les événements OnStart de l'Application et de la Session en même temps, mais l'Application précède la Session), chaque visiteur
Un événement OnEnd sera déclenché à la fin de chaque session (les événements OnEnd de l'application et de la session seront déclenchés à la fin de la dernière session invité, mais
La session précède la candidature).
Les deux événements OnStart et OnEnd sont généralement utilisés dans les communautés virtuelles pour compter le nombre de personnes en ligne, modifier le statut en ligne et hors ligne des utilisateurs, etc. Pour définir spécifiquement ces deux choses
fichier, vous devez écrire le code dans le fichier Global.asa et placer le fichier dans le répertoire racine du site (la valeur par défaut est Inetpubwwwroot). en outre,
Les objets Application et Session spécifient d'autres objets intégrés ASP (Response, Request,
Serveur, Session...) ne peut pas être utilisé. Ce qui suit est un exemple de comptage du nombre de personnes en ligne dans une communauté virtuelle pour illustrer comment utiliser ces deux événements.
Description du fichier :
global.asa se trouve dans le répertoire d:Inetpubwwwroot
default.asp se trouve dans le répertoire d:Inetpubwwwroot, la page de connexion à la communauté virtuelle
login.asp se trouve dans le répertoire d:Inetpubwwwroot et est utilisé pour détecter le nom d'utilisateur et le mot de passe saisis par l'utilisateur.
index.asp se trouve dans le répertoire d:Inetpubwwwroot, la page d'accueil de la communauté virtuelle
bbs.mdb se trouve dans le répertoire d:Inetpubwwwroot et est une base de données qui stocke les informations utilisateur.
Structure de la base de données (ACCESS) :
===tableau BB===
id ID utilisateur, entier long
nom nom d'utilisateur, type de texte
code mot de passe, type de texte
statut en ligne, oui/non
===global.asa===
<script LANGUAGE=VBScript RUNAT=Serveur>
Sous-application_OnStart
candidature (en ligne)=0
Fin du sous-marin
sous-Application_OnEnd
e sous
Sous-Session_OnStart
Fin du sous-marin
Sous-session_OnEnd
if session.contents(pass) then 'Déterminez s'il s'agit de la Session_OnEnd de l'utilisateur connecté
application.lock
application (en ligne)=application (en ligne)-1
application.déverrouiller
finir si
Fin du sous-marin
</script>
==============
===connexion.asp===
...'Vérification du mot de passe, connectez-vous à la base de données et vérifiez si le nom d'utilisateur et le mot de passe saisis par l'utilisateur sont corrects.
si la vérification du mot de passe réussit, alors
session(nom)=rs(nom)
session(id)=rs(id)
session (réussite) = vrai
autre
rs.fermer
connexion.fermer
Le mot de passe de réponse.write est erroné !
réponse.end
finir si
application.lock
application (en ligne)=application (en ligne)+1
conn.Execute (update bbs set online=1 which id=&session(id))'Définir le statut de l'utilisateur sur en ligne
application.déverrouiller
rs.fermer
connexion.fermer
réponse.redirect index.asp 'Après avoir initialisé les données, accédez à la page d'accueil de la communauté
===========
Dans cet exemple, utilisez la variable application (online) pour enregistrer le nombre de personnes en ligne qui se sont connectées à la communauté, car une fois qu'un utilisateur accède au serveur, peu importe qu'il soit connecté à la communauté.
Lorsque vous vous connectez, l'événement OnStart sera généré, vous ne pouvez donc pas augmenter l'application (en ligne) de un dans l'événement OnStart. Parce qu'il s'agit ou non d'une session d'utilisateur connecté
L'événement OnEnd sera généré à sa fin (si un visiteur visite le serveur mais ne se connecte pas à la communauté, l'événement OnEnd sera également généré après la fin de sa session), donc en
Une instruction if est utilisée dans l'événement Session_OnEnd pour déterminer s'il s'agit d'un événement OnEnd pour un utilisateur connecté. Si tel est le cas, le nombre de personnes en ligne sera réduit d'une.
Ceci n’est qu’un simple exemple de comptage du nombre de personnes en ligne. Pour une communauté virtuelle complète, il ne suffit pas de compter simplement le nombre de personnes en ligne. Dans ce cas, compter.
Il existe un champ en ligne dans la base de données qui est utilisé pour enregistrer l'état en ligne de l'utilisateur lorsque l'utilisateur se connecte, en ligne est défini sur 1 dans login.asp, mais il n'apparaît pas lorsque l'utilisateur est hors ligne.
Online est défini sur 0. Pour l'améliorer, vous devez modifier l'événement Session_OnEnd et définir online sur 0 dans cet événement.
===loal. sas===
<script LANGUAGE=VBScript RUNAT=Serveur>
Sous-application_OnStart
candidature (en ligne)=0
définir l'application (conn) = Server.CreateObject (ADODB.Connection)
application(db)=Server.MapPath( bs.mdb) 'Il est préférable d'utiliser ici le chemin absolu bs.mdb, comme détaillé ci-dessous
Fin du sous-marin
sousApplication_OnEnd
définir l'application (conn) = rien
Fin du sous-marin
Sous-Session_OnStart
Fin du sous-marin
Sous-session_OnEnd
if session.contents(pass) then 'Déterminez s'il s'agit de la Session_OnEnd de l'utilisateur connecté
application(con).open =driver={Pilote Microsoft Access (*.mdb)};dbq=&application(db)
application.lock
application (en ligne)=application (en ligne)-1
application(con).Execute (mettre à jour les amis définis en ligne=0 où id=&session.contents(id))
application.déverrouiller
application(con).close
finir si
Fin du sous-marin
</script>
==============
À ce stade, le code complet est terminé. Étant donné que l'objet Serveur ne peut pas être utilisé dans l'événement OnEnd d'Application et de Session, la base de données
L'adresse physique de la connexion et de la base de données sur le serveur (d:inetpubwwwroot bs.mdb) est stockée dans la variable d'application et
Prétraité dans l'événement Application_OnStart. De la même manière, session(pass) ne peut pas être utilisé à la place de session.contents dans l'événement Session_OnEnd.
(réussite) (explication détaillée ci-dessous).
4. Deux points dignes d’attention dans les exemples de cet article
⒈session.contents dans l'événement OnEnd
Les amis qui viennent de commencer à contacter global.asa font souvent référence à l'événement Session_OnEnd ci-dessus.
si session.contents(pass) alors écrit comme
si session (réussite) alors,
Dans ce cas, le système ne générera pas d'erreur, mais le contenu ultérieur ne sera jamais exécuté. En effet, il est interdit d'utiliser l'objet Session dans l'événement OnEnd.
Mais les variables de session peuvent être appelées à l'aide d'une collection d'objets Session. Comme IIS n'a généré aucun message d'erreur, l'auteur a perdu beaucoup de temps là-dessus.
entre. J'espère que tout le monde pourra en tirer des leçons !
⒉Lorsque vous utilisez Server.MapPath pour obtenir l'adresse physique de la base de données dans l'événement Application_OnStart, l'adresse absolue doit être utilisée. Pour illustrer ce problème, vous pouvez.
Faisons une expérience : modifiez l'événement Application_OnStart ci-dessus
application(db)=Server.MapPath( bs.mdb) est remplacé par :
application(db)=Serveur.MapPath(bbs.mdb)
Créez ensuite un sous-répertoire test dans le répertoire d:inetpubwwwroot et écrivez un temp.asp dans le répertoire test.
====test.asp====
<%response.write application(db)%>
================
Copiez ensuite temp.asp et placez-le dans le répertoire racine (d:inetpubwwwroot). Ouvrez global.asa avec le bloc-notes, puis ouvrez deux navigateurs, le navigateur A
Entrez l'adresse http://localhost/temp.asp et appuyez sur Entrée. Ce qui suit sera affiché sur le navigateur :
d:inetpubwwwroot bs.mdb
Ensuite, cliquez sur le menu Fichier dans la fenêtre du Bloc-notes et sélectionnez Enregistrer (pour modifier l'heure de modification de global.asa, provoquant ainsi le redémarrage de tous les services d'IIS), puis cliquez sur
Entrez l'adresse http://localhost/test/temp.asp dans le navigateur B et appuyez sur Entrée. La sortie sur le navigateur est :
d:inetpubwwwrootestbs.mdb
Bien que le fichier global.asa soit placé dans le répertoire racine du site, si une adresse relative est utilisée dans server.mappath, Application_OnStart est déclenchée.
Si la page visitée par l'utilisateur de l'événement pour la première fois n'appartient pas au répertoire racine, l'obtention de l'adresse physique de la base de données ne sera pas le résultat attendu, j'espère que tout le monde sera particulièrement prudent.