ASP-Vorlesung 3: Anwendungsobjekt und Sitzungsobjekt
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:58:17
In der vorherigen Vorlesung haben wir etwas über die Formulardatenerfassung, die QueryString-Datenerfassung und die ServerVariables-Datenerfassung des Request-Objekts gelernt. Bevor Sie mit der folgenden Studie fortfahren, wird empfohlen, dass Sie sich zunächst entspannen, da das als nächstes einzuführende Anwendungsobjekt relativ abstrakt ist und Sie beim ersten Verständnis möglicherweise nicht in der Lage sind, Dinge zu unterscheiden. Denken Sie daran: Wenn Sie es nicht finden können, denken Sie nicht zu viel darüber nach, was das Anwendungsobjekt ist. Wie das alte Sprichwort sagt: Lernen Sie zuerst, es zu nutzen.
1. Verstehen Sie das Anwendungsobjekt. Um Ihren Geist aufzufrischen, schauen wir uns eine Gegenroutine an (Sie sollten sie ausführen, um sie zu verstehen):
Bearbeiten Sie zunächst eine wuf16.htm-Datei:
<html>
<Körper>
Beispiel für die Erfassung der Anzahl der Klicks auf einer Seite: <a href="wuf17.asp">wuf17.asp</a>
</body>
</html>
Der Code von wuf17.asp lautet wie folgt:
<% @LANGUAGE = VBScript %>
<% 'wuf17.asp - Erfassen Sie die Anzahl der Besuche auf einer bestimmten Seite (Zählerprinzip)
Option explizit
Dim CountWeb
CountWeb = Request.ServerVariables("SCRIPT_NAME")
„Dadurch wird sichergestellt, dass jede Seite eine eindeutige Variable hat, um Verwirrung zu vermeiden.“
%>
<HTML><KÖRPER>
<%
Response.Write CountWeb & "<Br><Br>" & vbcrlf
Application.Lock 'Bitte lesen Sie die Erklärung
Application(CountWeb) = Application(CountWeb) + 1 'Akkumulator, addiere 1 zur Anzahl der Klicks
Anwendung.UnLock
Response.Write „Die Gesamtzahl der Klicks auf dieser Seite, bevor der WEB-Server heruntergefahren und neu gestartet wird, beträgt: „ & Application(CountWeb)
%>
</BODY></HTML>
Beim Ausführen dieses Programms gibt es für die meisten Benutzer nur einen Computer, der sowohl als Webserver als auch als Client fungiert. Dann können Sie sich eine Situation wie diese nur vorstellen: Ihre beiden Homepage-Dateien werden auf einem weit entfernten Webserver abgelegt, und eine Flut in- und ausländischer Benutzer greift über Browser darauf zu. Sobald jeder Benutzer klickt, wird der Wert von Application(CountWeb) um 1 erhöht, und solange der Server, auf dem die Datei wuf17.asp gespeichert ist, nicht geschlossen ist, sammelt sich Application(CountWeb) weiter an. Beachten Sie jedoch, dass die Anwendung (CountWeb) wieder bei 0 beginnt, wenn der Server heruntergefahren und dann neu gestartet wird (ich bin verwirrt, ich habe gesagt, warum die Anzahl meiner Seitenbesuche immer eine Ziffer ist). Um eine solche Zählsituation zu vermeiden, die immer bei Null beginnt, müssen Sie den Wert der Anwendung (CountWeb) speichern, bevor der Server heruntergefahren wird, und ihn beim nächsten Mal herausnehmen, damit er sequentiell akkumuliert werden kann Hören Sie sich dazu bitte „Decompose“ nach N-mal an.
Die nächste Frage ist, was Application.Lock und UnLock bedeuten. Wir sind einfach davon ausgegangen, dass eine große Anzahl von Benutzern die Seite besucht und jeder Klick eines Benutzers dazu führt, dass sich die Anwendung (CountWeb) um 1 erhöht. Denken Sie darüber nach, wäre das nicht ein Durcheinander (Was! Ich kann?) Wenn Sie nicht daran denken, müssen Sie es sein (nur Sie sind der Einzige, der die Homepage sponsert), daher muss es eine Regel geben: „Wer zuerst kommt, mahlt zuerst“. Wenn ein Benutzer die Seite besucht und den Wert der Anwendung (CountWeb) ändern muss, sperren Sie ihn mit der Lock-Methode, um zu verhindern, dass andere Benutzer ihn ändern. Entsperren Sie ihn nach Abschluss der Änderung.
Haben Sie im obigen Beispiel gesehen, dass das Anwendungsobjekt allen Benutzern gemeinsame Informationen (Application(CountWeb)) bereitstellt und sich an alle Benutzer richtet (der Zugriff jedes Benutzers führt dazu, dass der Zähler um 1 erhöht wird). Das Anwendungsobjekt verfügt außerdem über zwei Ereignisse, das Ereignis „Application_OnStart“ und das Ereignis „Application_OnEnd“ (nicht verwechseln, dies ist nur ein Startkonzept in objektorientierten Programmiersprachen. Die Syntax bei der Verwendung lautet wie folgt:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
SubApplication_OnEnd
„Wenn der WEB-Server geschlossen wird, wird das Ereignis „Application_OnEnd“ aktiviert
„Das heißt, das Programm führt den hier platzierten Code aus.“
„Bevor der Server heruntergefahren wird, können wir hier den Wert von Application (CountWeb) in wuf17.asp ändern.“
„Speichern Sie es, beispielsweise in einer Textdatei.“
Sub beenden
Sub Application_OnStart
„Wenn der erste Benutzer die ASP-Webseite durchsucht, wird das Ereignis „Application_OnStart“ aktiviert. Wenn jedoch in Zukunft andere Benutzer durchsuchen, tritt dieses Ereignis nicht auf.
„Das heißt, das Programm führt den hier platzierten Code aus.“
„Der in der Textdatei gespeicherte Wert von Application(CountWeb) kann hier gelesen werden.“
Sub beenden
</SCRIPT>
Das Folgende ist ein Beispiel, um die Verwendung von Ereignissen zu veranschaulichen. Die Funktion dieses Programms besteht darin, die Gesamtzahl der Klicks auf allen Seiten der Website zu zählen.
Der Code der Datei wuf18.asp (andere Seitendateien auf der Site ähneln dieser Datei):
<% @LANGUAGE = VBScript %>
<% Option explizit
„Alle Seitendateien auf der Website sollten diesen Satz enthalten: <!--#include file="wuf19.asp"-->%>
<!--#include file="wuf19.asp"-->
<HTML><KÖRPER>
Die Gesamtzahl der Zugriffe auf alle Seiten der Site, bevor der Server heruntergefahren und neu gestartet wird: <%= Application("CountAll") %>
</BODY></HTML>
Code der Datei wuf19.asp:
<% ' wuf19.asp
Anwendungssperre
Anwendung("CountAll") = Anwendung("CountAll") + 1
Anwendung.UnLock
%>
Die Dateien wuf18.asp und wuf19.asp werden im selben Verzeichnis abgelegt. Code der Datei global.asa:
Hinweis: Der Ereignishandler muss als Textdatei mit dem Namen „global.asa“ gespeichert und im Stammverzeichnis des virtuellen Pfads abgelegt werden (normalerweise im selben Verzeichnis wie die Datei index.htm oder default.htm, zum Beispiel: Nehmen Sie meinen Computer als Beispiel: global.asa wird unter c:InetPubhome platziert, während wuf18.asp und wuf19.asp unter c:InetPubhomeasp platziert werden Nur Pfad Es darf eine Datei global.asa existieren.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'global.asa - wuf18.asp Der Dateiname im Download-Paket lautet 18global.asa und muss bei Verwendung umbenannt werden.
Sub Application_OnStart
„Wenn der erste Benutzer die Webseite durchsucht, setzen Sie den Anfangswert des Zählers auf 0.“
„Wenn andere Benutzer in Zukunft surfen, wird der folgende Code nicht mehr ausgeführt.
Anwendungssperre
Anwendung("CountAll") = 0
Anwendung.UnLock
Sub beenden
</SCRIPT>
Durchsuchen Sie wuf18.asp, um die laufenden Ergebnisse anzuzeigen. Es scheint, dass es nicht schwierig ist, einfach den Umgang mit dem Anwendungsobjekt zu erlernen.
2. Verstehen Sie das Sitzungsobjekt. Mit dem vorherigen Application-Objekt als Vorbote ist das Session-Objekt viel einfacher. Es ähnelt dem Application-Objekt, wird jedoch nur zum Aufzeichnen von Informationen zu einem einzelnen Benutzer verwendet. Es ist auf einen einzelnen Benutzer ausgerichtet, sodass wir das Session-Objekt zum Speichern von Informationen zu einem einzelnen Benutzer verwenden können.
Wie das Application-Objekt verfügt auch das Session-Objekt über zwei Ereignisse: das Session_OnStart-Ereignis und das Session_OnEnd-Ereignis. Die Verwendungssyntax ähnelt der des Anwendungsobjekts.
Es ist erwähnenswert, dass Sie vor der Verwendung des Session-Objekts bestätigen müssen, dass die Cookie-Funktion des Browsers aktiviert ist (die Standardeinstellung ist in Ordnung).
Hier ist ein Beispiel. Die Anforderungen für die Datei global.asa sind die gleichen wie oben, daher wird die Datei global.asa im obigen Beispiel durch die Datei global.asa überschrieben.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
' global.asa - wuf20.asp Der Dateiname im Download-Paket lautet 20global.asa
SubSession_OnStart
Session("In") = Now 'Funktion Now ruft die aktuelle Uhrzeit ab
Sub beenden
SubSession_OnEnd
Sitzung("Out") = Jetzt
Anwendungssperre
Anwendung("Out") = Sitzung("Out")
Anwendung("In") = Sitzung("In")
Anwendung(„Out“).UnLock
Sub beenden
</SCRIPT>
Datei wuf20.asp:
<%@ Language=VBScript %>
<HTML>
<KÖRPER>
<% 'wuf20.asp
Response.Write „Standard-Timeout-Einstellungen:“ & Session.Timeout & „Minutes<Br>“
Session.Timeout = 1
Response.Write „Die Zeit, zu der Sie diese Website betreten haben:“ & Session(“In“) & „<Br>“
Antwort: Schreiben Sie „Bitte aktualisieren Sie diese Seite in 1 Minute“ und „<Br><Br>“
if Not IsEmpty(Application("Out")) then
Response.Write „Das letzte Mal, als Sie diese Website betreten haben:“ & Application(“In“) & „<Br>“
Response.Write „Das letzte Mal, als Sie diese Website verlassen haben:“ & Application(„Out“) & „<Br>“
Response.Write „Browsing-Zeit (Minuten):“ &_
Datediff("n",Application("In"),Application("Out")) & "<Br><Br>"
Ende wenn
if IsEmpty(Session("Out")) dann
Response.Write „Der Wert von Session(“„Out““) vor und nach der Aktualisierung ist leer“ & „<Br>“
Ende wenn
%>
</BODY>
</HTML>
Wenn der Benutzer die Webseite zum ersten Mal durchsucht, tritt das Ereignis „Session_OnStart“ auf. Das Programm zeichnet den Zeitpunkt auf, zu dem der Benutzer die Webseite betritt. Das Ereignis „Session_OnEnd“ tritt jedoch zu diesem Zeitpunkt nicht auf, sodass die Anwendung („Out“). Der Wert ist leer und das Programm zeigt die Browsing-Zeit nicht an.
Wir wissen, dass die Lebensdauer des Anwendungsobjekts vom ersten Durchsuchen der Webseite durch den Benutzer bis zum Herunterfahren des Servers reicht. Die Lebensdauer des Session-Objekts reicht vom ersten Durchsuchen der Webseite durch den Benutzer (Beginn der Sitzung) bis zum Ende der Sitzung. Wann endet die Sitzung? Konkret setzt Session.Timeout = 1 in diesem Beispiel das Sitzungszeitlimit auf 1 Minute. Das heißt, wenn 1 Minute lang keine Anfrage an den Webserver gestellt wird, läuft die Sitzung ab, wodurch die Sitzung beendet wird und das Ereignis Session_OnEnd auftritt. und das Programm führt den Code in Session_OnEnd aus. Hier geben wir die Eintritts- und Ausstiegszeiten in Application("In") bzw. Application("Out") ein, da das Session-Objekt nach Ende der Sitzung nicht mehr vorhanden ist. Wir haben dies am Ende des Codes überprüft.
Aus dieser Routine können wir Folgendes erkennen:
1. Anwendungsobjekte und Sitzungsobjekte haben unterschiedliche Lebensdauern.
2. Das Sitzungsobjekt ist für einen einzelnen Benutzer bestimmt und sein Wert wird auf dem Client gespeichert. Das Durchsuchen durch andere Benutzer hat keine Auswirkungen auf das Sitzungsobjekt für einen einzelnen Benutzer. Ein einzelner Benutzer kann nur den Wert seines eigenen Session-Objekts lesen und schreiben (zum Beispiel: Session("In")).
3. Beachten Sie die Darstellung doppelter Anführungszeichen in Response.Write: („Out“).
4. Besondere Erinnerung: Dieses Programm ist nicht praktikabel und dient nur zum Debuggen (nur zum Durchsuchen durch nur einen Benutzer geeignet). Bitte überlegen Sie, warum das so ist. Die Antwort finden Sie am Ende dieses Artikels.
Tipp: Bitte achten Sie auf die Eigenschaften des Anwendungsobjekts.
3. Ein klassisches Beispiel: So zeigen Sie die Anzahl der Personen an, die auf einer Webseite online sind. Im folgenden Beispiel wird Application („Online“) zum Speichern der Anzahl der Personen verwendet, die online sind, und Application („CountAll“) die Gesamtzahl der Besucher speichern.
Prinzip: Wenn ein neuer Benutzer die Webseite durchsucht, tritt das Ereignis Session_OnStart auf, die Anzahl der Online-Benutzer erhöht sich um 1 und die Anzahl der besuchenden Benutzer erhöht sich ebenfalls um 1. Wenn ein Benutzer die Sitzung verlässt, tritt das Ereignis Session_OnEnd ein, nachdem die Sitzung abgelaufen ist, und die Anzahl der Online-Personen wird um 1 reduziert.
Der Global.asa-Code lautet wie folgt:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'Global.asa-wuf21.asp
Sub Application_OnStart
Anwendungssperre
'Lesen Sie hier den Anfangswert von Application("CountAll")
Anwendung.UnLock
Sub beenden
SubSession_OnStart
Anwendungssperre
Bewerbung("Online") = Bewerbung("Online") + 1
Anwendung("CountAll") = Anwendung("CountAll") + 1
Anwendung.UnLock
Sub beenden
SubSession_OnEnd
Anwendungssperre
Bewerbung("Online") = Bewerbung("Online") - 1
Anwendung.UnLock
Sub beenden
SubApplication_OnEnd
Anwendungssperre
'Application("CountAll") sollte hier in der Datei gespeichert werden
Anwendung.UnLock
Sub beenden
</SCRIPT>
Der Wuf21.asp-Code lautet wie folgt:
<%@ Language=VBScript %>
<HTML>
<KÖRPER>
<%Session.Timeout = 5%>
<P>Anzahl der Personen online: <%= Application("Online")%></P>
<P>Gesamtzahl der Besucher: <%= Application("CountAll")%></P>
</BODY>
</HTML>
Bitte beachten Sie, dass diese Routine mit wuf17.asp verglichen wird. Letzteres zählt die Anzahl der Klicks, während ersteres die Anzahl der Besucher zählt.
Antwort: Da das Anwendungsobjekt für alle Benutzer gilt, werden bei Mehrbenutzern durch das Surfen anderer Benutzer auch die Werte von Anwendung („Ein“) und Anwendung („Aus“) geändert.