Warum würden Sie jemals Viewstate-Speicher verwenden asp.net Objekt über das Session-Speicherobjekt?

StackOverflow https://stackoverflow.com/questions/575568

Frage

Anders als da Session-Speicherung ist sitzungs global auf mehr als eine Seite, warum sollte man sich nur wünschen den Ansichtszustand verwenden, um Werte zu halten?

Es scheint irgendwie lächerlich jede Art von Information anders als ein paar kleine Abfrage-String wie Werte zu senden, hin und her vom Client zum Server. Ich meine, was eine Verschwendung von Bandbreite (!), Einfach zu Lagerzwecken. Die Sitzung, während global über mehrere Seiten, scheint wie eine völlig überlegene Alternative zu dem Ansichtszustand.

Gerade bei asp.net Ajax Kontrollen und Varianten könnte der Ansichtszustand schnell aufgebläht wird die verschiedenen Zustände und Variablen von all den verschiedenen Kontrollen und HTML-Elemente zu verfolgen.

Aber warum gibt es dann Ansichtszustand Speicher für Seitenvariablen und Objekte überhaupt?

Vielleicht gibt mir fehlt eine andere große Nutzung für den Ansichtszustand Lagerung Seite, weiß jemand etwas?

Vielen Dank für das Lesen!

EDIT:. Wir hatten alle eine große Antwort, sorry, wenn ich nicht von Ihnen haben wählen

War es hilfreich?

Lösung

Sitzungen ablaufen, hat Viewstate nicht - man kann eine Stunde später zurück gehen und Ihr Ansichtszustand wird immer noch zur Verfügung steht. Ansichtszustand ist auch konsequent zur Verfügung, wenn Sie gehen vor / zurück auf der Website, Session Änderungen.

Andere Tipps

Der ganze Grund für Viewstate oder Session ist die Bahn von einem stateless System in ein dynamisches, individuellen Erlebnis. Wenn ein Benutzer eine Seite anfordert, kann der einzige Weg, wieder aufzunehmen, wo der Benutzer in ihrer Erfahrung aufhörte, den Zustand entweder auf dem Server oder auf dem Benutzer-Client erinnern.

Viewstate ist ein Mechanismus für die auf dem Client-Zustand des Benutzers zu erinnern. Session ist ein Mechanismus für den auf dem Server Zustand des Benutzers zu erinnern.

Viewstate ist ein vorübergehender Speichermechanismus. Steuerelemente, die Ansichtszustand haben ihren Zustand in die HTML-Seite als verdeckte Eingabe gemacht verwenden. Um Manipulationen zu verhindern, ist es unterzeichnet. Es ist nicht verschlüsselt, aber so möchten Sie wahrscheinlich empfindlich dort setzen, alles zu vermeiden. Ansichtszustand ist nützlich für Situationen, in denen Sie über Serie von mehreren Anforderungen (Seite geladen) zu stellen. Ein Beispiel hierfür ist, wenn ein Formular überprüft nicht, weil vielleicht der Benutzer eine schlechte E-Mail-Adresse oder etwas eingegeben, und Sie mögen die Form wieder herzustellen, wie es war, bevor der Benutzer vorgelegt. Die Nachteile dabei ist, dass Ansichtszustand ein hungriges Tier ist und 30-50% auf Seitengröße leicht hinzufügen kann.

Session, auf der anderen Seite wird auf dem Server gespeichert. Der Kunde erhält ein Token, das den Server, der Speicherblock erzählt ihnen gehört. Dies kann viel sicherer als Ansichtszustand sein, weil die Daten für den Benutzer nicht immer und immer wieder neu übertragen werden. Es gibt Kompromisse though. Ihr Server kann über genügend Arbeitsspeicher ausgeführt. Oder könnte der Benutzer die Daten verlieren, wenn ihre Sitzung unterbrochen wird.

Im Allgemeinen gibt es keine „richtige“ Antwort, auf das verwenden. Es ist alles, was Sie versuchen zu erreichen.

Die meisten Dinge mit Kontrollen zu tun sollten Viewstate verwenden. Wenn Sie sich mit sensiblen Informationen zu tun hat jedoch betrachten Session. Wenn Sie Daten, die für einen bestimmten Satz von Seiten, verwendet Ansichtszustand. Wenn es sich um Daten, die Sie während eines Benutzers Besuch auf Ihrer Website benötigen, considier Session.

Zum Beispiel, wenn Ihre Anwendung kann in einem Computer Farm ausgeführt werden, und Sie können nicht-Sitzung konfigurieren SQL Server zu verwenden. (Oder mit SQL Server ist zu viel von einer Performance-Einbußen)

Viewstate und Session haben unterschiedliche Bereiche. Viewstate ist so konzipiert, mehr oder weniger transiente Daten zu speichern, während der „Postbacks“, während Sitzung verwendet wird, um kritische Sitzungsstatusdaten zu speichern. Ich empfehle für Staat im Zusammenhang mit einer bestimmten „Seite session“ mit Viewstate.

Wenn Sie nicht das normale Verhalten von Viewstate mögen, es ist ziemlich einfach dein eigenes PageStatePersister zu schreiben und lassen Sie dieses Objekt-Persistenz durchführen, zum Beispiel unter Verwendung von Session, oder so etwas wie Memcached. Anschließend können Sie den Standard Persistenzmechanismus vollständig außer Kraft setzen.

Dann die gute Sache ist, dass Sie nahtlos Standard-Web-Steuerelemente in .NET Framework weiterverwenden können, das wird alle verwenden Viewstate / Control für diese Art von Daten, ohne dass die Viewstate Blähungen. Ein Server-Speicher Persistenzmechanismus könnte sehr effizient sein.

Nicht wirklich eine direkte Antwort auf Ihre Frage, aber es kann Ihr Problem beheben.

Sie können speichern Ansichtszustand Server-Seite, die Nutzlast für den Kunden entfällt.

Erstellen Sie eine Klasse, die erbt Seite, und die PageStatePersister außer Kraft setzen. http://msdn.microsoft.com/en- us / library / system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

Viewstate ist im Wesentlichen nur ein versteckter Eingang, der mit jeder Anforderung an den Server und analysiert hochgeladen werden muß. Dieses Feld wird in der Regel automatisch ausgefüllt, oft mit dem Programmierer völlig ahnungslos, und kann ziemlich groß werden. Für viele Websites, die ein Problem darstellen, denn auch Breitband-Nutzer Upstream-Bandbreite sehr begrenzt haben.

Auf Intranet-Site, wo alle Benutzer High-Speed-LAN-Zugriff auf den Server haben, aber die Ramme zum Halten Sitzungsdaten begrenzt sind, kann es sinnvoller sein.

Nicht eine Antwort auf Ihre Frage, aber eine Ihrer Annahmen falsch ist.

Session-IDs können in der URL übergeben werden. Session erfordert keine Cookies.

http://msdn.microsoft.com/en-us/library /aa479314.aspx

<sessionState cookieless="true" />

Sie tun eine App, wo Ansichtszustand aufblasen, zum größten Teil, kein Thema ist, dann ist es besser, zu speichern Seite spezifischer Daten im Ansichtszustand, weil es Ihre Server besser ausführen kann. Wenn Sie mit Session verrückt gehen, oder jedes Caching, was das betrifft, können Sie sich mehr schaden dann Sie sich selbst helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top