Wie viele Daten können / sollten Sie in einem Benutzersitzungsobjekt speichern?

8

Wir haben auf unserer Website mehrere Anwendungen im Stil eines Wizards, bei denen wir Informationen vom Benutzer auf jeder Seite erfassen und dann über einen Webdienst an einen Back-End-Prozess übergeben.

Leider können wir die Informationen nicht in Blöcken bei jeder Formularübermittlung einreichen, also müssen wir die Benutzer-Sitzung bis zum Ende des Prozesses speichern und sie alle gleichzeitig übermitteln.

Ist die Menge an Serverspeicher / sql Server Speicherplatz die einzige Einschränkung, wie viel ich in Benutzersitzungen speichern kann oder gibt es noch etwas, das ich beachten muss?

Bearbeiten: Die Site wird auf ASP.NET-Webformularen erstellt.

    
Andy Rose 16.09.2008, 14:36
quelle

5 Antworten

3

Unter der Annahme, dass die Informationen nicht vertraulich sind, könnten Sie die Informationen in einem Cookie speichern, wodurch sich die Menge an Informationen verringert, die für die Server-Seite benötigt werden. Auf diese Weise können Sie auch über JavaScript auf die Informationen zugreifen.

Alternativ können Sie den Viewstate verwenden, um die Informationen zu speichern, obwohl dies dazu führen kann, dass große Datenmengen zwischen dem Server und dem Client gesendet werden und nicht meine bevorzugte Lösung.

Die Menge der Sitzungsinformationen, die Sie speichern sollten, variiert abhängig von der Anwendung, der Anzahl der erwarteten Benutzer, der Serverspezifikation usw. Um eine genauere Antwort zu geben, wären weitere Informationen erforderlich:)

Wenn Sie schließlich davon ausgehen, dass die im gesamten Prozess gesammelten Informationen nicht von Seite zu Seite benötigt werden, können Sie alle Informationen in einer Datenbanktabelle speichern und nur die eindeutige ID der Datensätze in der Sitzung speichern. Wenn jede Seite übergeben wird, wird der Datenbankdatensatz aktualisiert und auf der letzten Seite werden alle Informationen abgerufen und übermittelt. Dies ist keine Ideallösung, wenn Sie aufgrund der Anzahl der erforderlichen db-Lesevorgänge vorherige Informationen auf jeder nachfolgenden Seite abrufen müssen.

    
Toby Mills 16.09.2008, 14:49
quelle
2

Sie könnten auch eine ASP-Seite mit dem gesamten HTML-Formular haben und Teile davon ausblenden, bis der Benutzer den sichtbaren Teil füllt und "abschickt" ...

dann einfach ausblenden den Teil, der ausgefüllt ist und den nächsten Teil des Formulars anzeigen ...

Dies wäre im .NET-Framework extrem einfach, verwende für jeden "Assistentenschritt" Panels und füge hinzu, wann jedes Panel angezeigt und ausgeblendet werden soll.

Sie werden dann alle Daten auf einer Seite haben.

    
mmattax 16.09.2008 15:09
quelle
0

Wenn Sie ein herkömmliches HTTP-Modell verwenden (dh nicht runat="server" verwenden), können Sie die Daten auf einer anderen asp-Seite veröffentlichen und die geposteten Daten in versteckte Formularelemente einfügen. Dies können Sie für so viele Seiten tun muss also vermieden werden, irgendetwas in eine Session-Variable zu platzieren.

    
mmattax 16.09.2008 14:40
quelle
0

Da es unter dem Gesichtspunkt der Leistung problematisch ist, große Datenmengen in einem Benutzer-Session-Objekt zu speichern, bietet ASP.Net einige weitere Problemumgehungen zusätzlich zu dem, was in den obigen Posts erwähnt wird. Mit ASP.NET-Profilanbieter können Sie sitzungsbezogene Informationen in einer Datenbank persistieren. Sie können auch den Sitzungsstatusserver verwenden, der einen separaten Server zum Speichern aller Sitzungsinformationen verwendet. Beide Situationen berücksichtigen, wenn Sie Cluster oder Load Balancer verwenden müssen, können die Server die Sitzungsinformationen weiterhin auf verschiedenen Servern erkennen. Wenn Sie Informationen im Http Session-Objekt speichern, tritt das Problem auf, dass ein Benutzer immer zu demselben Server für diese Sitzung wechseln muss.

    
amitm 16.09.2008 15:33
quelle
0

Sitzung, Anzeigestatus, Datenbank. Diese sind alle langsam aber werden die Arbeit erledigen.

Versteckte Formularfelder sind die Antwort, die mir am besten gefällt.

Es gibt andere Möglichkeiten, den Status beizubehalten. Cookies, Popup-Fenster, Frameset oder iframes.

    
Axl 26.06.2009 21:54
quelle

Tags und Links