Bei der Verwendung von ASP zum Schreiben virtueller Communities, Online-Shopping und anderer Programme spielen die Anwendungs- und Sitzungsobjekte eine entscheidende Rolle und können flexibel und rational verwendet werden.
Dieses Objekt ist der Schlüssel zur Verbesserung der Programmqualität. Lassen Sie mich Ihnen basierend auf meiner Erfahrung in diesem Bereich eine ausführliche Einführung in diese beiden integrierten Objekte von ASP geben.
1. Übersicht über die Mitglieder des Anwendungsobjekts
Zu den Mitgliedern des Anwendungsobjekts gehören Anwendungsobjektsammlungen, -methoden und -ereignisse.
⒈Eine Sammlung von Anwendungsobjekten
Inhaltssammlung: Eine Sammlung aller im Applicaiton-Objekt gespeicherten Variablen, die nicht mithilfe des <OBJECT>-Elements definiert sind.
StaticObjects: Eine Sammlung aller Variablen, die im Anwendungsobjekt gespeichert sind, das mit dem <OBJECT>-Element definiert wurde
Beispiel: In default.asp gibt es die folgende Zuweisung
Anwendung(a)=a
Anwendung(b)=128
Anwendung(c)=false
Dann gibt es noch die Inhaltssammlung
application.contents(1)=a 'kann auch als application.contents(a)=a geschrieben werden
application.contents(2)=128 'kann auch als application.contents(b)=128 geschrieben werden
application.contents(3)=false 'kann auch als application.contents(c)=false geschrieben werden
Der Autor empfiehlt hier, beim Aufruf eine Methode wie application.contents(a) zu verwenden, da diese intuitiver ist. Wenn sie durch eine Seriennummer dargestellt wird,
Berücksichtigen Sie die Reihenfolge der Zuweisung.
⒉Methoden des Anwendungsobjekts
Contents.Remove(Variablenname): Löschen Sie die angegebene Variable aus der Application.Contents-Sammlung
Contents.RemoveAll(): Alle Variablen in der Application.Contents-Sammlung löschen
Lock(): Sperren Sie das Anwendungsobjekt, sodass nur die aktuelle ASP-Seite auf den Inhalt zugreifen kann.
Unlock(): Entsperren Sie das Anwendungsobjekt
Beispiel: In default.asp:
Anwendung(a)=a
Anwendung(b)=128
Anwendung(c)=false
Response.write application.contents(1)&<br>
Response.write application.contents(2)&<br>
Response.write application.contents(3)&<br>
Response.write nach Remove b:
application.contents.remove(b)
Response.write application.contents(1)&<br>
Response.write application.contents(2)&<br>
Ausführungsergebnis:
A
128
FALSCH
Nach Entfernen b:
A
FALSCH
Wenn Sie alle Variablen in der Sammlung löschen möchten, verwenden Sie einfach application.contents.removeall. Die Methoden Lock und Unlock werden in der Praxis häufig verwendet
Dem Leser ist es auch bekannt, sodass es hier keine Belastung darstellen wird.
⒊Anwendungsobjektereignis
OnStart: Tritt auf, wenn der erste Benutzer, der auf den Server zugreift, zum ersten Mal auf eine Seite zugreift
OnEnd: Tritt auf, wenn die Sitzung des letzten Benutzers beendet wurde und alle Codes für das OnEnd-Ereignis der Sitzung ausgeführt wurden, oder wenn der letzte Benutzer zugreift
Der Server wird nach einer gewissen Zeit (normalerweise 20 Minuten) aktiviert, wenn niemand auf den Server zugreift.
Wenn Sie definieren möchten, was in den Ereignissen OnStart und OnEnd des Anwendungsobjekts geschehen soll, müssen Sie den Code in die Datei Global.asa schreiben (Beispiele unten) und
Und legen Sie die Datei im Stammverzeichnis der Site ab (normalerweise Inetpubwwwroot).
2. Übersicht über die Mitglieder des Session-Objekts
Die Mitglieder des Session-Objekts verfügen über ein weiteres Attribut als das Application-Objekt, nämlich Sammlungen, Eigenschaften, Methoden und Ereignisse.
⒈Sammlung von Sitzungsobjekten
Inhalt: Eine Sammlung aller in einem bestimmten Sitzungsobjekt gespeicherten Variablen, die nicht mithilfe des <OBJECT>-Elements definiert sind.
StaticObject: Eine Sammlung aller Variablen, die mit dem <OBJECT>-Element definiert und im Session-Objekt gespeichert werden.
Beispiel: In default.asp gibt es die folgende Zuweisung
Sitzung(a)=a
Sitzung(b)=128
Sitzung(c)=false
Dann gibt es noch die Inhaltssammlung
session.contents(1)=a 'kann auch als session.contents(a)=a geschrieben werden
session.contents(2)=128 'kann auch als session.contents(b)=128 geschrieben werden
session.contents(3)=false 'kann auch als session.contents(c)=false geschrieben werden
⒉Eigenschaften des Sitzungsobjekts
Codepage: Lesbar/beschreibbar. Integer-Typ. Definiert die Codepage, die zum Anzeigen von Seiteninhalten im Browser verwendet wird. Eine Codepage ist der Zeichensatz numerischer Werte, den verschiedene Sprachen verwenden
Verschiedene Codepages. Die ANSI-Codepage ist beispielsweise 1252, die japanische Codepage ist 932 und die Codepage für vereinfachtes Chinesisch ist 936.
LCID: Lesbar/beschreibbar. Integer-Typ. Definiert die an den Browser gesendete Seitengebietsschema-ID. LCID ist eine internationale Standardabkürzung, die eine Region eindeutig identifiziert, z.
2057 definiert das Währungssymbol der aktuellen Region als £.
Sitzungs-ID: Nur lesen. Langer Typ. Gibt die Sitzungskennung für diese Sitzung zurück. Jedes Mal, wenn eine Sitzung erstellt wird, wird vom Server automatisch eine Kennung zugewiesen. kann sich darauf stützen
Der Wert bestimmt, welcher der beiden Benutzer zuerst auf den Server zugreift.
Zeitüberschreitung: Lesbar/beschreibbar. Integer-Typ. Definiert ein Timeout-Limit in Minuten für die Sitzung. Wenn der Benutzer innerhalb dieser Zeit keine Aktualisierung vornimmt oder eine Anfrage stellt
Auf der Webseite wird die vom Benutzer generierte Sitzung automatisch beendet. Der Standardwert ist 20.
Die oben genannten Attribute sind in tatsächlichen Anwendungen von geringem Nutzen und müssen grundsätzlich nicht geändert werden. Diese Attribute haben nichts Besonderes.
⒊Methoden des Sitzungsobjekts
Contents.Remove(Variablenname): Entfernen Sie die angegebene Variable aus der Session.contents-Sammlung
Contents.Removeall(): Alle Variablen in der Session.contents-Sammlung entfernen
Abandon(): Beenden Sie die aktuelle Benutzersitzung und zerstören Sie das aktuelle Sitzungsobjekt.
Die Methoden Contents.Remove (Variablenname) und Contents.Removeall() des Session-Objekts sind grundsätzlich dieselben wie die des Application-Objekts.
Zum besseren Verständnis können Sie sich das obige Beispiel ansehen, um „Anwendung“ in „Sitzung“ zu ändern. Was ich hier erklären möchte, sind Contents.Removeall() und Abandon()
Der Unterschied besteht darin, dass durch die Ausführung dieser beiden Methoden der Strom freigegeben wird
Alle Session-Variablen der Benutzersitzung. Der Unterschied besteht darin, dass Contents.Removeall() einfach den Wert der Session-Variablen freigibt, ohne die aktuelle Sitzung zu beenden.
Abandon() gibt nicht nur die Session-Variable frei, sondern beendet auch die Sitzung und löst das Session_OnEnd-Ereignis aus. Ich hoffe, dass jeder den Unterschied zwischen den beiden beachtet.
⒋Ereignisse des Sitzungsobjekts
OnStart: Wird ausgelöst, wenn eine ASP-Benutzersitzung generiert wird. Dieses Ereignis wird generiert, sobald ein Benutzer eine Seite von diesem Server anfordert.
OnEnd: Wird ausgelöst, wenn die ASP-Benutzersitzung endet. Dieses Ereignis wird auch ausgelöst, wenn die Abandon()-Methode oder Timeout verwendet wird.
Diese beiden Ereignisse sind mit den Ereignissen OnStart und OnEnd von Application identisch und müssen in der Datei Global.asa platziert werden.
Konzentrieren wir uns darauf, mit Ihnen die Verwendung dieser vier Ereignisse zu untersuchen.
3. Global.asa
Die Anwendungs- und Sitzungsobjekte von ASP verkörpern eine Funktion, die andere in ASP integrierte Objekte nicht haben: Ereignisse. Jedes Mal, wenn ein Besucher auf den Server zugreift, a
OnStart-Ereignisse (der erste Besucher löst gleichzeitig die OnStart-Ereignisse von Application und Session aus, die Application geht jedoch der Session voraus), jeder Besucher
Ein OnEnd-Ereignis wird ausgelöst, wenn jede Sitzung endet (die OnEnd-Ereignisse von Anwendung und Sitzung werden ausgelöst, wenn die letzte Gastsitzung endet, aber
Sitzung geht der Anwendung voraus).
Die beiden Ereignisse OnStart und OnEnd werden im Allgemeinen in virtuellen Communities verwendet, um die Anzahl der Personen zu zählen, die online sind, den Online- und Offline-Status von Benutzern zu ändern usw. Um diese beiden Dinge konkret zu definieren
Datei müssen Sie den Code in die Datei Global.asa schreiben und die Datei im Stammverzeichnis der Site ablegen (der Standardwert ist Inetpubwwwroot). Zusätzlich,
Die Anwendungs- und Sitzungsobjekte geben andere in ASP integrierte Objekte an (Response, Request,
Server, Sitzung...) können nicht verwendet werden. Das Folgende ist ein Beispiel für die Zählung der Anzahl der Personen, die in einer virtuellen Community online sind, um zu veranschaulichen, wie diese beiden Ereignisse genutzt werden können.
Dateibeschreibung:
global.asa befindet sich im Verzeichnis d:Inetpubwwwroot
default.asp befindet sich im Verzeichnis d:Inetpubwwwroot, der Anmeldeseite der virtuellen Community
login.asp befindet sich im Verzeichnis d:Inetpubwwwroot und wird verwendet, um den vom Benutzer eingegebenen Benutzernamen und das Kennwort zu erkennen.
index.asp befindet sich im Verzeichnis d:Inetpubwwwroot, der Homepage der virtuellen Community
bbs.mdb befindet sich im Verzeichnis d:Inetpubwwwroot und ist eine Datenbank, die Benutzerinformationen speichert.
Datenbankstruktur (ACCESS):
===BBS-Tabelle===
id Benutzer-ID, lange Ganzzahl
Name Benutzername, Texttyp
Code-Passwort, Texttyp
Online-Online-Status, ja/nein
===global.asa===
<script LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Bewerbung(online)=0
Sub beenden
subApplication_OnEnd
nd Sub
SubSession_OnStart
Sub beenden
SubSession_OnEnd
if session.contents(pass) then 'Bestimmen Sie, ob es sich um Session_OnEnd des angemeldeten Benutzers handelt
application.lock
Bewerbung(online)=Bewerbung(online)-1
application.unlock
Ende wenn
Sub beenden
</script>
==============
===login.asp===
...'Passwortüberprüfung, Verbindung zur Datenbank herstellen und prüfen, ob der vom Benutzer eingegebene Benutzername und das Passwort korrekt sind.
Wenn die Passwortüberprüfung erfolgreich ist, dann
Sitzung(Name)=rs(Name)
Sitzung(id)=rs(id)
session(pass)=true
anders
rs.close
Verbindung schließen
Das Response.write-Passwort ist falsch!
Antwort.Ende
Ende wenn
application.lock
Bewerbung(online)=Bewerbung(online)+1
conn.Execute (update bbs set online=1 where id=&session(id))'Setzen Sie den Status des Benutzers auf online
application.unlock
rs.close
Verbindung schließen
Response.redirect index.asp 'Springen Sie nach der Initialisierung der Daten zur Community-Homepage
===========
In diesem Beispiel verwenden Sie die Anwendungsvariable (online), um die Anzahl der Online-Personen aufzuzeichnen, die sich bei der Community angemeldet haben, denn sobald ein Benutzer auf den Server zugreift, spielt es keine Rolle, ob der Benutzer dies tut
Wenn Sie sich anmelden, wird das OnStart-Ereignis generiert, sodass Sie die Anwendung (online) im OnStart-Ereignis nicht um eins erhöhen können. Denn unabhängig davon, ob es sich um eine Sitzung eines eingeloggten Benutzers handelt
Das OnEnd-Ereignis wird generiert, wenn es endet (wenn ein Besucher den Server besucht, sich aber nicht bei der Community anmeldet, wird das OnEnd-Ereignis auch generiert, nachdem seine Sitzung endet), also in
Im Session_OnEnd-Ereignis wird eine if-Anweisung verwendet, um zu bestimmen, ob es sich um ein OnEnd-Ereignis für einen angemeldeten Benutzer handelt. Wenn ja, wird die Anzahl der Online-Personen um eins reduziert.
Dies ist nur ein einfaches Beispiel für das Zählen der Anzahl der Personen, die online sind. Für eine vollständige virtuelle Community reicht es nicht aus, nur zu zählen, wie viele Personen online sind
In der Datenbank gibt es ein Online-Feld, das zum Aufzeichnen des Online-Status des Benutzers verwendet wird. Wenn sich der Benutzer anmeldet, wird „Online“ in login.asp auf 1 gesetzt, es wird jedoch nicht angezeigt, wenn der Benutzer offline ist.
Online ist auf 0 gesetzt. Um es zu verbessern, müssen Sie das Ereignis Session_OnEnd ändern und in diesem Ereignis online auf 0 setzen.
===loal. sas===
<script LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Bewerbung(online)=0
set application(conn)=Server.CreateObject(ADODB.Connection)
application(db)=Server.MapPath( bs.mdb) 'Am besten verwenden Sie hier den absoluten Pfad bs.mdb, wie unten beschrieben
Sub beenden
subApplication_OnEnd
setze application(conn)=nichts
Sub beenden
SubSession_OnStart
Sub beenden
SubSession_OnEnd
if session.contents(pass) then 'Bestimmen Sie, ob es sich um Session_OnEnd des angemeldeten Benutzers handelt
application(con).open =driver={Microsoft Access Driver (*.mdb)};dbq=&application(db)
application.lock
Bewerbung(online)=Bewerbung(online)-1
application(con).Execute (Update Friends Set online=0, wobei id=&session.contents(id))
application.unlock
application(con).close
Ende wenn
Sub beenden
</Skript>
==============
Zu diesem Zeitpunkt ist der vollständige Code fertiggestellt. Da das Serverobjekt nicht im OnEnd-Ereignis von Anwendung und Sitzung verwendet werden kann, ist das der Datenbank nicht möglich
Die physische Adresse der Verbindung und Datenbank auf dem Server (d:inetpubwwwroot bs.mdb) wird in der Anwendungsvariablen und gespeichert
Vorverarbeitet im Application_OnStart-Ereignis. Ebenso kann session(pass) nicht anstelle von session.contents im Session_OnEnd-Ereignis verwendet werden.
(bestanden) (ausführliche Erklärung unten).
4. Zwei Punkte, die in den Beispielen dieses Artikels Beachtung verdienen
⒈session.contents im OnEnd-Ereignis
Freunde, die gerade begonnen haben, global.asa zu kontaktieren, verweisen häufig auf das oben genannte Session_OnEnd-Ereignis
if session.contents(pass) dann geschrieben als
Wenn die Sitzung bestanden ist, dann ,
In diesem Fall wird das System keinen Fehler auslösen, aber der Inhalt danach wird nie ausgeführt. Dies liegt daran, dass die Verwendung des Session-Objekts im OnEnd-Ereignis verboten ist.
Sitzungsvariablen können jedoch mithilfe einer Sammlung von Sitzungsobjekten aufgerufen werden. Da IIS keine Fehlermeldung auslöste, hat der Autor einmal viel Zeit damit verschwendet.
zwischen. Ich hoffe, dass jeder daraus lernen kann!
⒉Wenn Sie Server.MapPath verwenden, um die physische Adresse der Datenbank im Application_OnStart-Ereignis abzurufen, sollten Sie die absolute Adresse verwenden. Um dieses Problem zu veranschaulichen, können Sie dies tun
Machen wir ein Experiment: Ändern Sie das obige Application_OnStart-Ereignis
application(db)=Server.MapPath( bs.mdb) wird geändert in:
application(db)=Server.MapPath(bbs.mdb)
Erstellen Sie dann ein Testunterverzeichnis im Verzeichnis d:inetpubwwwroot und schreiben Sie eine temp.asp in das Testverzeichnis.
====test.asp====
<%response.write application(db)%>
================
Kopieren Sie dann temp.asp und platzieren Sie es im Stammverzeichnis (d:inetpubwwwroot). Öffnen Sie global.asa mit Notepad und öffnen Sie dann zwei Browser, Browser A
Geben Sie die Adresse http://localhost/temp.asp ein und drücken Sie die Eingabetaste. Folgendes wird im Browser ausgegeben:
d:inetpubwwwroot bs.mdb
Klicken Sie dann im Notepad-Fenster auf das Menü „Datei“ und wählen Sie „Speichern“ (um die Änderungszeit von global.asa zu ändern, wodurch IIS alle Dienste neu startet) und klicken Sie dann auf
Geben Sie die Adresse http://localhost/test/temp.asp in Browser B ein und drücken Sie die Eingabetaste. Die Ausgabe im Browser lautet:
d:inetpubwwwroottestbs.mdb
Obwohl die Datei global.asa im Stammverzeichnis der Site abgelegt ist, wird Application_OnStart ausgelöst, wenn in server.mappath eine relative Adresse verwendet wird.
Wenn die Seite, die der Ereignisbenutzer zum ersten Mal besucht, nicht zum Stammverzeichnis gehört, ist das Abrufen der physischen Adresse der Datenbank hoffentlich nicht das erwartete Ergebnis.