Frage

Ich kam vor kurzem in einer ASP 1.1 Web-Anwendung, die einen ganzen Haufen Sachen in dem Session-Variable setzen - inklusive dem all DB-Datenobjekte und auch das DB-Verbindungsobjekt. Es endet riesig zu sein. Wenn die Web-Sitzung abläuft manchmal (vier Stunden nach dem Benutzer der Anwendung beendet hat), um ihre Datenbank-Transaktionen zurück gerollt. Ich gehe davon aus das ist, weil die DB-Verbindung nicht ordnungsgemäß geschlossen wird, wenn IIS die Sitzung tötet.

Wie auch immer, meine Frage ist, was sollte in der Sitzung variabel sein? Offensichtlich müssen einige Dinge in dort sein. Der Benutzer wählt planen, die sie wollen, auf dem Hauptbildschirm bearbeiten, so der Plan-ID in die Session-Variablen geht. Ist es besser, zu versuchen, die Last auf dem DB zu reduzieren, indem alle Details über den Benutzer zu speichern (und deren Manager etc.) und der Plan, den sie in der Session-Variablen bearbeiten oder sollte ich versuchen, die Sachen in der Session-Variablen zu minimieren und Abfrage der DB für alles, was ich in dem Ereignis Page Load brauchen?

War es hilfreich?

Lösung

Das ist ziemlich schwer zu beantworten, weil es so anwendungsspezifisch, aber hier sind ein paar Richtlinien, die ich benutze:

  1. Legen Sie so wenig wie möglich in der Sitzung.
  2. Anwenderspezifische Auswahl, die nur während eines bestimmten Besuchs ist eine gute Wahl
  3. dauern sollte
  4. häufig, Variablen, die auf mehreren Seiten während der gesamten Benutzer-Besuchs auf Ihrer Website zugänglich sein müssen (vermeiden, dass sie von Seite zu Seite vorbei) sind auch gut in der Sitzung zu setzen.

Von dem, was wenig Sie über Ihre Anwendung gesagt haben, ich würde wahrscheinlich Ihre Daten aus der DB auswählen und versuche, Wege zu finden, um die Auswirkungen dieser Abfragen statt Laden auf der Sitzung zu minimieren.

Andere Tipps

Do nicht setzen Datenbankverbindungsinformationen in der Sitzung.

Was Caching, würde ich mit der Sitzung für das Caching, wenn möglich vermeiden - Sie werden auf Probleme stoßen, wo jemand anderes die Daten ändert ein Benutzer verwendet, und Sie können die im Cache gespeicherten Daten zwischen Benutzern nicht teilen. Verwenden Sie das ASP.NET Cache oder ein anderes Cache-Dienstprogramm (wie Memcached oder Geschwindigkeit).

Soweit, was sollte geht in der Sitzung, alles, was auf gilt alle Browserfenster ein Benutzer auf Ihrer Seite geöffnet hat (Login, Sicherheitseinstellungen etc.) sollte in der Sitzung sein. Dinge wie, welche Objekt angesehen / bearbeitet wird, sollte wirklich um zwischen den Bildschirmen vergangen GET / POST-Variablen sein, so dass ein Benutzer mehrere Browser-Fenster können mit der Anwendung arbeiten (es sei denn Sie das verhindern möchten).

NICHT setzen UI-Objekte in der Sitzung.

darüber hinaus, würde ich sagen, es variiert. zu viel in der Sitzung können Sie verlangsamen, wenn Sie nicht die in Prozess-Sitzung verwenden, weil Sie viel zu gehen Serialisierung + die Geschwindigkeit des Anbieters. Cache und Session sollten sparsam und mit Bedacht eingesetzt werden. Nicht nur in der Sitzung setzen, weil Sie können oder sind bequem. Setz dich hin und analysieren, ob es Sinn macht.

Idealerweise sollte die Sitzung in ASP speichert die geringste Menge an Daten, die man sich erlauben kann. einen Verweis auf ein beliebiges Objekt zu speichern, die Systemressourcen offen (insbesondere eine Datenbankverbindung) Killer ist eine bestimmte Skalierbarkeit hält. Auch unbestätigte Daten in einer Sitzungsvariablen speichern ist nur eine schlechte Idee, in den meisten Fällen. Insgesamt klingt es wie die aktuelle Implementierung ist missbräuchlich Sitzungsobjekte verwenden, um zu versuchen und eine Stateful-Anwendung in einer vermeintlich staatenlos Umgebung zu simulieren.

Auch wenn es viel geschmähte ist, das ASP.NET-Modell des Zustandes automatisch durch versteckte Felder der Verwaltung wirklich die Mehrheit der Notwendigkeit zu beseitigen, sollte alles in Session-Variablen zu halten.

Faust Meine Regel ist, dass die skalierbarer (in Bezug auf die Benutzer / Hits), dass die App sein muss, desto weniger können Sie mit der Verwendung des Sitzungsstatus wegzukommen. Es ist jedoch ein Kompromiss. Für Web-Anwendungen, bei denen der Benutzer wiederholt die gleichen Daten zugreift, und hat in der Regel eine ziemlich lange Sitzung pro Nutzung der Website, einige Caching (wenn in Sitzungsobjekte erforderlich) kann tatsächlich Skalierbarkeit helfen, indem sie die Last auf dem DB-Server zu reduzieren. Die Idee dabei ist, dass es viel billiger und weniger komplex ist, die Präsentationsschicht als die Back-End-DB auf dem Bauernhof. Natürlich mit allen Dingen, soll dieser Rat in Maßen genommen werden und nicht in allen Situationen, aber für eine relativ einfache in-house CRUD app, sollte es Ihnen gute Dienste leisten.

gilt

A: Daten, die nur in Bezug auf einen Benutzer. IE: ein Benutzername, eine Benutzer-ID. Bei die meisten ein Objekt darstellt, einen Benutzer. Manchmal URL-relative Daten (wie, wo jemand nehmen) oder eine Fehlermeldung Stapel sind nützlich, in die Sitzung zu drücken.

Wenn Sie Sachen teilen möglicherweise zwischen verschiedenen Benutzern möchten, verwenden Sie den Application Store oder den Cache. Sie sind weit überlegen.

Stephen,
Arbeiten Sie für ein Unternehmen, das mit „I“ beginnt, dass eine Website hat, die mit „BC“ beginnt? Das klingt genau wie das, was ich tat, als ich in .net ersten begann mit der Entwicklung (und war jung und dumm) - ich alles vollgestopft ich in Sitzungs- und denken konnte. Unnötig zu sagen, das war doppelt-plus ungood.
In der Regel scheue Sitzung so viel wie möglich. Sicherlich nicht serialisierbaren Objekte sollten nicht dort gespeichert werden (Datenbankverbindungen und so weiter), aber auch große, serialisierbare Objekte sollten nicht sein. Sie nicht nur den Aufwand wollen.

Ich würde immer nur sehr wenige Informationen in der Sitzung halten. Sessions verwenden Server Speicherressourcen, die teuer ist. zu viele Werte in Sitzung zu speichern erhöht die Last auf dem Server und eventualy die Leistung der Website wird nach unten gehen. Wenn Sie Lastausgleich-Server verwenden, Verwendung von Session kann auf Probleme stoßen. Also, was ich tue, ist minimal oder keine Sitzungen verwenden, Cookies verwenden, wenn die Informationen nicht sehr kritisch ist, verwenden Sie versteckte Felder mehr und Datenbanksitzungen.

scroll top