Ich bin neu in ASP.NET MVC. Ich habe zuvor PHP verwendet und es war einfach, eine Sitzung zu erstellen und Benutzerdatensätze basierend auf den aktuellen Sitzungsvariablen auszuwählen.
Ich habe überall im Internet nach einer einfachen Schritt-für-Schritt-Anleitung gesucht, die mir zeigt, wie ich Sitzungen in meiner C # ASP.NET MVC 4-Anwendung erstelle und verwende. Ich möchte eine Sitzung mit Benutzervariablen erstellen, auf die ich von überall in meinen Controllern zugreifen kann, und die Variablen in meinen LINQ-Abfragen verwenden können.
asp.net-mvc
session
asp.net-mvc-4
session-variables
Thuto Paul Gaotingwe
quelle
quelle
Antworten:
Versuchen
quelle
WebSecurity.CurrentUserId
damit er nicht mehrmals aus der Datenbank abgerufen wird (ich fand ihn sehr kostspielig)?Account/LogOn
bisHome/Index
,Session["FirstName"]
istnull
. Entwickler müssen einen übergeordneten Controller (BaseController
) erstellen und ein geschütztes Feld (internal protected HttpSessionStateBase SharedSession
) definieren , das die gemeinsam genutzte Sitzungsvariable in allenBaseController
Aufgrund der Statuslosigkeit des Webs sind Sitzungen auch eine äußerst nützliche Methode, um Objekte über Anforderungen hinweg zu persistieren, indem sie serialisiert und in einer Sitzung gespeichert werden.
Ein perfekter Anwendungsfall hierfür könnte sein, wenn Sie auf reguläre Informationen in Ihrer Anwendung zugreifen müssen, um zusätzliche Datenbankaufrufe bei jeder Anforderung zu speichern. Diese Daten können in einem Objekt gespeichert und bei jeder Anforderung unserialisiert werden, wie folgt:
Unser wiederverwendbares, serialisierbares Objekt:
Anwendungsfall:
Sobald dieses Objekt serialisiert wurde, können wir es auf allen Controllern verwenden, ohne es erstellen oder die Datenbank erneut nach den darin enthaltenen Daten abfragen zu müssen.
Injizieren Sie Ihr Sitzungsobjekt mit Dependency Injection
In einer idealen Welt würden Sie " auf eine Schnittstelle programmieren, nicht implementieren " und Ihr serialisierbares Sitzungsobjekt mithilfe des von Ihnen gewählten Inversion of Control-Containers in Ihren Controller einfügen (in diesem Beispiel wird StructureMap verwendet, wie ich es am besten kenne ).
Sie würden dies dann in Ihrer
Global.asax.cs
Datei registrieren .Für diejenigen , die mit dem Einspritzen Sitzungsobjekte nicht vertraut sind, können Sie eine tiefer gehende Blog - Post über das Thema finden Sie hier .
Ein Wort der Warnung:
Es ist erwähnenswert, dass Sitzungen auf ein Minimum beschränkt werden sollten. Große Sitzungen können Leistungsprobleme verursachen.
Es wird auch empfohlen, keine vertraulichen Daten (Kennwörter usw.) darin zu speichern.
quelle
So funktioniert der Sitzungsstatus in ASP.NET und ASP.NET MVC:
Übersicht über den ASP.NET-Sitzungsstatus
Grundsätzlich tun Sie dies, um einen Wert im Sitzungsobjekt zu speichern:
So rufen Sie den Wert ab:
quelle
Account
bisHome
, ist Sitzung ["Vorname"] null. Entwickler müssenBaseController
ein geschütztes Feld (internal protected HttpSessionStateBase SharedSession
) erstellen und definieren , das die gemeinsam genutzteSession
Variable in allenBaseController
Sie können jede Art von Daten in einer Sitzung speichern, indem Sie:
Diese Variable dauert ungefähr 20 Minuten.
quelle
Sie können einen beliebigen Wert in einer Sitzung speichern, z. B. Sitzung ["Vorname"] = VornameTextBox.Text; aber ich werde u vorschlagen, als statisches Feld im Modell Wert zuzuweisen, und Sie können auf diesen Feldwert überall in der Anwendung zugreifen. Du brauchst keine Sitzung. Sitzung sollte vermieden werden.
auf dem Controller - Employee.FullName = "ABC"; Jetzt können Sie überall in der Anwendung auf diesen vollständigen Namen zugreifen.
quelle