Frage

die gesamte Sitzung in einem Cookie gespeichert hat in Rails in den letzten paar Jahren Standard - gibt es eine einfache Möglichkeit, etwas ähnliches mit ASP MVC zu erreichen

?

In der Standardeinstellung etwas in Session / TempData im Speicher auf dem Server gespeichert. In web.config kann dies zu einem SQL-Store / Server-seitige Cache geändert werden. Ich mag diese Objekte in einem Cookie beibehalten haben können.

Es sieht aus wie ich einen benutzerdefinierte Session-State-Store Provider implementieren könnte. Gibt es einen einfacheren Ansatz?

War es hilfreich?

Lösung

ja, implementieren eine benutzerdefinierten Zustand session-Anbieter rel="nofollow. Und nein, afaik gibt es keine einfachen Ansatz.

Ps. es ist nicht so schlimm, wie es heißt aussieht> Hälfte der odbc Probe schreibt an die DB.

Andere Tipps

Ich denke, es wäre viel effizienter zu speichern, um nur die Session-ID (einen Hash oder was auch immer) in dem Cookie, und dann diese ID verwenden, um die Sitzungsdaten aus dem Speicher / Datenbank zu erhalten / was auch immer Speicher, den Sie bevorzugen. den vollen Sitzungszustand in einem Cookie erhöht Keeping Bandbreite innecessarily.

Auch halten die Sicherheit im Auge: Wenn die Cookie-Authentifizierungsinformationen oder andere sensible Daten enthält, und Sie sind nicht vorsichtig sind, können sie leicht durch den Benutzer gehackt werden Rechte zu erlangen oder anderweitig Schlamassel mit Ihrer Anwendung (Verschlüsselung saugt die Daten zu , denn dann müssen Sie die verschlüsselten Daten, der weiteren Abfall Bandbreite und Verarbeitungszeit) Basis-64 kodieren. Sie sollte nie Vertrauen Eingabe vom Benutzer.

Ich würde raten dringend die gesamte Sitzung in Cookies gespeichert werden. Es hat schlechte Auswirkungen auf die Leistung. Bedenken Sie: jede Anfrage (jede Ressource) einen Overhead möglicherweise veraltete Daten enthalten, die Sie nur einmal oder zweimal brauchen. Schließlich dieser Aufwand wird Ihre Benutzer treffen, Ihre Bandbreite und Leistung Ihrer Website.

Hier ist ein Beispiel:

GET / HTTP/1.1
Host: localhost
OtherUsefulHeaders: foo
Cookie: YourSessionState=...

Initial Anforderungsgröße ist ca. 200 Byte. Lassen Sie uns sagen, Sie rund 100 Bytes zu Ihrer Sitzung hinzufügen. Nun ist die Größe von 300 Bytes und Overhead ist ~ 30%. Sie fügen weitere 100 Bytes und Overhead beträgt 50%. Was bedeutet es etwa 2x Zeit erfordert die Anforderung und 2x Bandbreite zu senden.

Sie sollten lieber schauen Sie in Cookie-basierte TempData Implementierung , da es deutlich geringeren Platzbedarf hat und tatsächlich Sinn macht.

Ich empfehle Speicher TempData im Cookie (in Bezug auf die gesamte Sitzung im Gegensatz).

Um im Cookie zu speichern TempData, müssen Sie ITempDataProvider außer Kraft zu setzen und Ihre eigenen Provider zu implementieren.

Es ist eigentlich ein nuget Paket verfügbar (was bedeutet 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 brauchen Sie nicht über das Senden von Klartext über das Internet sorgen.

Alles was Sie tun müssen, ist das nuget Paket zu installieren und dann CreateTempDataProvider in Ihrer ControllerBase Klasse außer Kraft setzen:

using BrockAllen.CookieTempData;

namespace myProject.web.Controllers
{
    public class ControllerBase : Controller
    {
        // use CookieTempDataProvider instead of default provider
        protected override ITempDataProvider CreateTempDataProvider()
        {
            return new CookieTempDataProvider();
        }
    }
}

Sie sollten nicht Sessions für diese, sondern Profile statt. Profile verwenden Cookies Computer Profile übereinstimmen, usw. Das Profil Schlüssel wird in einem Cookie gespeichert und gehen nicht verloren, wenn Browser zu schließen usw.

Info hier; http://odetocode.com/articles/440.aspx

hängt davon ab, welche Art von Daten Sie in der Cookie zu speichern, wenn Sie nur zu speichern Zeichenfolge wollen, tun Sie der folgende Code:

HttpCookie cookie = new HttpCookie("username","sth");
            cookie.HttpOnly = true;
            cookie.Expires = DateTime.Now.AddMonths(3);
            HttpContext.Current.Response.Cookies.Add(cookie);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top