Jeder, der ein etwas größeres ASP geschrieben hat, weiß, dass das Session-Objekt wirklich einfach zu verwenden ist. Es kann zum Aufzeichnen der privaten Datenvariablen des Benutzers verwendet werden, was sowohl sicher als auch praktisch ist. Aber wissen Sie wirklich, wie Session funktioniert? Jeder, der ein etwas größeres ASP geschrieben hat, weiß, dass das Session-Objekt wirklich einfach zu verwenden ist. Es kann zum Aufzeichnen der privaten Datenvariablen des Benutzers verwendet werden, was sowohl sicher als auch praktisch ist. Aber wissen Sie wirklich, wie Session funktioniert? Vielleicht trauen Sie sich, nachdem Sie es verstanden haben, nicht mehr, dieses geliebte und verhasste Objekt zu benutzen. Obwohl die alternative Methode etwas mühsam ist, muss sie nach längerer Überlegung durchgeführt werden.
Lassen Sie uns zunächst über die Vorteile von Session sprechen. Es kann zum Aufzeichnen der privaten Datenvariablen des Kunden verwendet werden und verschwindet nicht innerhalb des Zeitbereichs. Dies ist wirklich eine wichtige Funktion, insbesondere für Systeme mit Elementen, die verwendet werden müssen. Zum Beispiel das Anmeldekonto des Mitglieds, die Uhrzeit, den Status und viele Echtzeitdaten, die aufgezeichnet werden sollten (z. B. das Einkaufssystem, das die Artikel im Warenkorb des Benutzers aufzeichnet). Diese Informationen werden von jedem Benutzer privat benötigt und normalerweise von Entwicklern verwendet . Verarbeitung von Sitzungsdatensätzen.
Allerdings besteht die Sitzung in ASP aus Cookies und der Server überträgt alle in der Sitzung aufgezeichneten Daten in Form von Cookies an den Browser des Benutzers. Normalerweise speichern allgemeine Browser diese Cookies, wenn der Benutzer auf einen Link klickt und sich erneut mit dem Server verbindet, sendet der Browser diese Cookies zur Verarbeitung an den Server zurück. Dies ist das Funktionsprinzip von Session. Da die Datenmenge gesendet und zurückgenommen werden muss, wird nicht nur Leitungsbandbreite verbraucht, sondern auch die Leistung verringert, da der Server mehr Ressourcen für die Online-Verarbeitung und Neukonfiguration aufwenden muss Erinnerung. Erste Aktion. Jetzt denken Sie vielleicht: „Ich muss diese Funktion nutzen, also muss ich sie opfern.“ In diesem Artikel geht es jedoch einerseits darum, sie weniger zu nutzen Es gibt Alternativen. Als nächstes fällt auf, dass es auch zum Global.asa-Anwendungsobjekt gehört.
Die Anwendung ist auch in der Lage, temporäre Daten gut aufzuzeichnen und zu verarbeiten. Im Vergleich dazu sind die von ihr aufgezeichneten Daten öffentlich, d. h. ein variabler Bereich, der von jedem Benutzer gemeinsam genutzt werden kann. Im Gegensatz zu Session überträgt die Anwendung keine Daten an den Benutzer und wartet auf die nächste Verbindung, um sie direkt im Speicher auf dem Server aufzuzeichnen. Im Vergleich dazu ist die Leistung viel schneller.
Da das Anwendungsobjekt öffentlich ist, muss zunächst ein gemeinsamer Bereich für jeden Benutzer geplant werden, damit jeder Benutzer seinen eigenen Bereich zum Aufzeichnen von Daten haben kann, um den Zweck der Sitzungssimulation zu erreichen. Es gibt jetzt zwei Ansätze:
1. Initialisieren, erstellen und weisen Sie Benutzerspeicherplatz im Voraus zu, wenn der Server aktiviert wird. Obwohl dieser Ansatz beim Starten des Servers viele Ressourcen belegt, erspart er dem Benutzer normalerweise auch die Mühe, ihn jedes Mal zuweisen zu müssen ist in Zukunft online. Es gibt jedoch eine Einschränkung. Da sie sofort nach der Aktivierung initialisiert wird, können wir nur die Schaffung einer bestimmten Menge an Speicherplatz abschätzen. Daher wird diese Methode normalerweise in kleinen Programmen verwendet wie zum Beispiel Chatrooms.
2. Diese Methode sollte als geeigneter für große Anwendungen angesehen werden. Sie verwendet eine dynamische Zuweisungsmethode und beginnt mit der Zuweisung von Ressourcen an den Benutzer, wenn dieser sich zum ersten Mal mit dem Server verbindet. Der Zweck dieser beiden Methoden zur Sitzungssimulation besteht darin, den Verbrauch von Sitzungsressourcen zu reduzieren. Sie können jedoch nicht vollständig ersetzt werden. Wir müssen immer noch ein wenig Sitzung verwenden, was zumindest die Belastung erheblich verringern kann Server.
Erste Option
Zuerst beginnen wir mit der Implementierung der ersten Lösung. Da die Anwendung während der Aktivierung initialisiert wird, müssen wir natürlich von Global.asa ausgehen:
Die Initialisierung ist abgeschlossen, aber wie wird sie verwendet? Wir müssen nur die ursprünglich mit Session gespeicherten Daten wie Kontonummer und Anmeldezeit in das von uns erstellte Anwendungsobjekt ändern, in dem sich der Benutzer anmeldet:
Kopieren Sie den Codecode wie folgt:
„Suchen Sie nach ungenutztem Platz.“
Für i = 1 To Application(ClientMax)
Wenn Application(User_Status_ & i) = 0, dann
'Temporäre Benutzernummer
Sitzung(Index) = i
'Verriegelung
Anwendung Application.Lock
'Auf Gebrauchtstatus setzen
Application(User_Status_ & i) = 1 'Variablendaten eingeben
Application(User_Account_ & i) = Konto
Application(User_Logtime_ & i) = Now()
„Entsperren
Anwendung.Entsperren
Ausgang für
Ende wenn
Nächste
Um benutzerbezogene Variablendaten zu erhalten, gehen Sie wie folgt vor:
Response.Write(Application(User_Account_ & Session(Index))
Sie werden vielleicht feststellen, dass es nicht heißt, Session nicht zu verwenden? Warum existiert Session dann noch im obigen Quellcode? Wie bereits erwähnt, kann diese Alternative die Sitzung nicht vollständig ersetzen. Die Verbindung zum Server wird nach dem Lesen der Seite getrennt. Zu diesem Zeitpunkt müssen wir uns auf die Anzahl der Echtzeitnummern verlassen, die der Benutzer in der Anwendung hat Ein Schlüssel, und auf dem Schlüssel befindet sich eine Nummer, und die Nummer auf dem Schlüssel ermöglicht es dem Angestellten, Sie zu Ihrem eigenen Safe zu führen. Es gibt noch Verbesserungen an dieser Methode, sie ist jedoch für kleine Anwendungen ausreichend.
Zweite Option
In Bezug auf die vorherige Lösung denken Sie möglicherweise auch, dass unsere benutzerdefinierten Nummern mithilfe von Session aufgezeichnet werden. Apropos Zahlen: Das Session-Objekt stellt eine „SessionID“-Methode bereit. Das ist richtig, unabhängig davon, ob wir es verwenden möchten oder nicht, weist der Server jedem Benutzer automatisch eine Nummer zu und diese Nummer wird nicht wiederholt. Diese Nummer wird über Session.SessionID abgerufen. Diese Nummerierung ist eine Aktion, die Session auf jeden Fall durchführen wird. Wir können damit das von uns selbst geschriebene Nummerierungsprogramm ersetzen, was ebenfalls viel Aufwand spart und sogar eine größere Skalierbarkeit bietet. Aber im Grunde hat die erste oben genannte Lösung immer noch ihre Verwendungsmöglichkeiten, beispielsweise für kleine Anwendungen wie Chatrooms, die die Anzahl der Personen begrenzen. Die nächste Alternative ist für größere Systeme.
Für Websites mit Hunderten, Tausenden oder sogar Zehntausenden Besuchern pro Sekunde wird die bisherige Lösung definitiv nicht funktionieren. Angenommen, Sie legen die Obergrenze der Personenzahl auf 10.000 fest. Nach der Aktivierung hilft Ihnen der Server, 10.000 Bereiche für 10.000 Benutzer auszuschneiden. Wenn ein Bereich 5 Variablen enthält und eine Variable 32 Bytes belegt, belegt er mehr als 320.000 K (320 MB), Server Sobald es aktiviert ist, wird so viel Müll in den Speicher gestopft, und die Leistung wird zwangsläufig stark reduziert, bevor es ins Spiel kommt. Schauen Sie sich diese kleinen Zahlen nicht an und denken Sie, dass Ihre 512 MB sein werden Bei den oben genannten Zahlen wird von einer Mindestanzahl ausgegangen. Es ist nicht bekannt, wie viele zusätzliche Ressourcen der Server bei der Speicherkonfiguration verwenden wird, es wird also nur mehr und nicht weniger sein. Daher besteht die einzige Lösung darin, den Benutzervariablenraum dynamisch zu konfigurieren und nur dann einen Bereich auszuschneiden, wenn ein Benutzer mit dem Server verbunden ist. Auf diese Weise ist es nicht erforderlich, im Voraus großen Speicher zu konfigurieren.
Die zweite Option ist relativ einfach zu implementieren. Bitte werfen Sie alles in die erste Option. Wir müssen Global.asa nicht berühren. Wir müssen nur den Benutzeranmeldeort und andere nützliche Orte ändern.
Kopieren Sie den Codecode wie folgt:
'LockApplicationApplication.Lock 'Put variable Daten
Anwendung(User_Account_ & Session.SessionID) = Konto
Application(User_Logtime_ & Session.SessionID) = Now() 'Application.Unlock entsperren
Um benutzerbezogene Variablendaten zu erhalten, gehen Sie wie folgt vor:
Kopieren Sie den Codecode wie folgt:
Response.Write(Application(User_Account_ & Session.SessionID))
In der Vergangenheit habe ich viele Bücher gelesen, in denen stand, dass Sitzungen sehr ressourcenintensiv sind, also versuchen Sie, sie nicht zu verwenden, aber Sie müssen sie trotzdem verwenden, wenn Sie müssen, und in den Büchern wurden keine passenderen Lösungen gelehrt. Nachdem Sie nun verstanden haben, wie Sie Session ersetzen können, können Sie davon profitieren! Vielleicht können die Leistungsprobleme, die mich immer geplagt haben, erheblich verbessert werden!