Frage

Ich brauche einen Datensatz aus einer Datenbank abgerufen werden, zeigt sie auf einer Web-Seite (Ich bin mit ASP.NET), sondern speichern die ID (Primärschlüssel) aus diesem Datensatz irgendwo so dass ich später zurück in die Datenbank gehen mit dass ID (vielleicht ein Update zu tun).

Ich weiß, es gibt wahrscheinlich ein paar Möglichkeiten, dies, wie die Speicherung der ID in Viewstate oder ein verstecktes Feld zu tun, aber was ist die beste Methode und was die Gründe dafür sind, ich könnte diese Methode über alle anderen wählen?

War es hilfreich?

Lösung

Es hängt davon ab.

Haben Sie Sorge, wenn jemand die ID-Datensatz sieht? Wenn Sie dann versteckte Felder und Ansichtszustand beides sind nicht geeignet; Sie müssen es in den Sitzungsstatus speichern, oder Ansichtszustand verschlüsseln.

Haben Sie Sorge, wenn jemand das Formular mit einer gefälschten ID einreicht? Wenn Sie das tun, dann können Sie nicht ein verstecktes Feld verwenden (und Sie müssen bei CSRF-Schutz als Bonus suchen)

Wollen Sie es unveränderbar aber kümmern sich nicht um sie (mit etwas Arbeit) zu sehen offen zu sein? Verwenden Sie Ansichtszustand und setzt enableViewStateMac = „true“ auf Ihrer Seite (oder global)

Wollen Sie es versteckt und geschützt, kann aber nicht den Sitzungsstatus verwenden? Verschlüsseln Sie Ihre Ansichtszustand, indem Sie die folgenden web.config Einträge

<pages enableViewState="true" enableViewStateMac="true" />
<machineKey ... validation="3DES" />

Andere Tipps

Wollen Sie die Endbenutzer die ID wissen? Zum Beispiel, wenn der ID-Wert ist ein Standard 1,1 Saatgut aus der Datenbank, die ich an der Reihe aussehen könnte und sehen, wie viele Kunden Sie haben. Wenn Sie den Wert (als Ansichtszustand kann) verschlüsseln würde ich finde es viel schwieriger, den Schlüssel zu entziffern (aber nicht unmöglich).

Die Alternative ist es in der Sitzung zu speichern, wird dies ein (sehr klein wenn es nur eine ganze Zahl) setzt Performance-Einbußen auf Ihrer Anwendung aber bedeuten, dass ich als Nutzer nie, dass Primärschlüssel zu sehen. Es macht auch das Objekt in anderen Teilen der Anwendung, die Sie können oder es nicht zu (Sitzungsobjekte ausgesetzt werden können, wollen bleiben, bis gelöscht, eine bestimmte Zeit (zB 5 Minuten) geht oder das Browser-Fenster geschlossen ist - je nachdem, was passiert, früher .

Ansicht Zustandswerte verursachen zusätzliche Last auf dem Client nach jedem zweiten Pfosten, weil der Ansichtszustand nicht nur Objekte für die Seite speichert, aber erinnert sich Objekte, wenn Sie die Zurück-Taste verwenden. Das heißt, nach jedem Post zurück Ansichtszustand wird es etwas größer und schwerer zu verwenden. Sie werden nur auf er Seite existieren, bis der Browser auf eine andere Seite geht.

Jedes Mal, wenn ich speichern eine ID in der Seite wie diese, ich schaffe immer eine Eigenschaft

public int CustomerID {
    get { return ViewState("CustomerID"); }
    set { ViewState("CustomerID") = value; }
}

oder

    Public Property CustomerID() As Integer
        Get
            Return ViewState("CustomerID")
        End Get
        Set(ByVal value As Integer)
            ViewState("CustomerID") = value
        End Set
    End Property

So, wenn Sie sich entscheiden, ein Session-Variable oder ein verstecktes Formularfeld aus Viewstate zu ändern, es ist nur ein Fall davon in der Eigenschaft Referenz zu ändern, kann der Rest der Seite auf die Variable zugreifen „Page.CustomerID“ mit .

Viewstate ist eine Option. Es ist nur gültig für die Seite, die Sie auf sind. Es führt keine über Anfragen an anderen Ressourcen wie das Session-Objekt.

Versteckte Felder arbeiten auch, aber Sie sind undicht und wenig Informationen über Ihre Anwendung zu jemandem klug genug die Quelle Ihrer Seite zu sehen.

Sie können auch Ihre gesamte Datensatz in Viewstate speichern und vielleicht eine andere Rundfahrt vermeiden Server Th.

Ich persönlich bin sehr misstrauisch über alles in der Sitzung setzen. Zu oft haben unsere Arbeitsprozesse durchlaufen und wir unseren Sitzungsstatus verloren.

Wie Sie Ihr Problem beschrieben, würde ich es in einem versteckten Feld setzen oder in dem Ansichtszustand der Seite.

Auch bei der Bestimmung, wo wie diese Daten zu setzen, schaut immer auf dem Umfang der Daten. Ist es auf eine einzelne Seite scoped, oder auf die gesamte Sitzung? Wenn die Antwort ‚Sitzung‘ für uns ist, haben wir es in einem Cookie. (Disclaimer: Wir schreiben Intranet-Anwendungen, wo wir wissen, dass Cookies aktiviert sind.)

Wenn sie eine einfache ID wählt es in Abfragezeichenfolgeflag passiert, auf diese Weise brauchen Sie nicht Postbacks und Seite zu tun, für Nutzer und Suchmaschinen mehr zugänglich ist.

Session["MyId"]=myval;

Es wäre ein wenig sicherer und im Wesentlichen bietet die gleiche Mechanik, wie es in dem Ansichtszustand setzen

Ich neige dazu, Dinge zu bleiben wie die in versteckten Feldern nur tun, ein wenig

 <asp:label runat=server id=lblThingID visible=false />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top