Die Verwendung von cookies zum speichern von session im ASP MVC
Speicherung der gesamten Sitzung in einem cookie wurde standard in Rails für die letzten paar Jahre - gibt es eine einfache Möglichkeit, etwas zu erreichen, ähnlich wie mit ASP MVC?
Standardmäßig, alles, was in der Sitzung /TempData wird im Speicher gespeichert, auf den server. Im web.config dieser kann geändert werden, um eine SQL-Shop /server-side-cache. Ich möchte in der Lage sein, diese Objekte persistent gespeichert in einem cookie.
Es sieht aus wie ich könnte bei der Implementierung einer benutzerdefinierten Session-State-Speicher-Anbieter. Gibt es einen einfacheren Ansatz?
- Meinst du das Wort "gesamte session in einem cookie'?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ja, implementieren Sie eine benutzerdefinierte Staat session-Anbieter. Und Nein, afaik gibt es nicht einen einfacheren Ansatz.
Ps. es ist nicht so schlimm, wie es aussieht, D. H. > die Hälfte der odbc sample ist schriftlich an die db.
Ich denke, es wäre viel effizienter, nur speichern der session-ID (hash oder was auch immer) in dem cookie, und dann verwenden Sie diese ID, um die session-Daten aus dem Speicher /Datenbank /whatever Speicher, den Sie bevorzugen. Halten Sie die volle session-Status in einem cookie erhöht die Bandbreite innecessarily.
Denken Sie auch an die Sicherheit im Hinterkopf: wenn das cookie enthält Authentifizierungs-Informationen oder andere sensible Daten und du bist nicht vorsichtig, es kann leicht gehackt werden, indem die Benutzer-Rechte zu erhalten oder anderweitig Durcheinander mit Ihrer Anwendung (Verschlüsselung der Daten nervt auch, weil man dann zu base-64-Kodierung der verschlüsselten Daten, die weitere Abfälle, die Bandbreite und die Verarbeitungszeit). Sollten Sie nie Vertrauen von den Eingaben des Benutzers.
Ich würde dringend davon abgeraten, da der gesamte session in cookies. Hat es schlechte Auswirkungen auf die Leistung. Bedenken Sie: jede Anfrage (jede Ressource) enthalten, wird ein Zuschlag von möglicherweise veralteten Daten, Sie müssen nur einmal oder zweimal. Schließlich ist dieser overhead schlagen Ihren Benutzern, Ihre Bandbreite und Ihre Website-performance.
Hier ein Beispiel:
Ersten Anfrage eine Größe von rund 200 bytes. Lassen Sie uns sagen, Sie fügen Sie rund 100 bytes, die zu Ihrer Sitzung. Nun die Größe ist 300 bytes und overhead ist ~30%. Fügen Sie weitere 100 bytes, und der overhead ist 50%. Was bedeutet es etwa benötigt 2x mal um die Anfrage zu senden und 2x Bandbreite.
Sollte man eher schauen, in cookie-basierte TempData Umsetzung, wie es hat viel kleinere Stellfläche und tatsächlich Sinn macht.
Ich empfehlen die Aufbewahrung
TempData
im cookie (im Gegensatz zu der gesamten Sitzung).Um zu speichern
TempData
in dem cookie, Sie außer Kraft setzen müssenITempDataProvider
und implementieren Sie eigene, benutzerdefinierte Anbieter.Es ist eigentlich ein nuget-Paket verfügbar (was tut diese benutzerdefinierte Implementierung für Sie): BrockAllen.CookieTempData und hier ist die Dokumentation. Das gute an diesem Paket ist, dass es sowohl komprimieren und verschlüsselt Ihre
TempData
, so dass Sie nicht brauchen, um sorgen über das senden von nur-text über das Internet.Alles, was Sie tun müssen, ist installieren Sie die nuget-Paket und dann überschreiben
CreateTempDataProvider
in IhremControllerBase
Klasse:Sollten Sie sich nicht in Sitzungen, sondern auch die Profile, statt. Profile verwenden cookies, um match-Computern zu Profil, etc. Der Profil-Taste wird in einem cookie gespeichert und ist nicht verloren, wenn Sie schließen, browser etc.
Info hier; http://odetocode.com/articles/440.aspx
hängt davon ab, welche Art von Daten Sie speichern möchten, in dem cookie, wenn Sie wollen einfach nur zum speichern von string, der folgende code tun: