it-swarm.com.de

Wie Verwenden von Sitzungen in einer ASP.NET MVC 4-Anwendung?

Ich bin neu bei ASP.NET MVC. Ich habe vorher 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 einem einfachen Schritt-für-Schritt-Tutorial gesucht, in dem gezeigt wird, wie Sitzungen in meiner C # ASP.NET MVC 4-Anwendung erstellt und verwendet werden. 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 kann.

-Danke im Voraus!

97

Versuchen

//adding data to session
//assuming the method below will return list of Products

var products=Db.GetProducts();

//Store the products to a session

Session["products"]=products;

//To get what you have stored to a session

var products=Session["products"] as List<Product>;

//to clear the session value

Session["products"]=null;
144
Jobert Enamno

Aufgrund des statuslosen Charakters 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 könnte dies sein, wenn Sie auf regelmäßige Informationen in Ihrer gesamten Anwendung zugreifen müssen, um zusätzliche Datenbankaufrufe für jede Anforderung zu speichern. Diese Daten können in einem Objekt gespeichert und bei jeder Anforderung deaktiviert werden, z.

Unser wiederverwendbares, serialisierbares Objekt:

[Serializable]
public class UserProfileSessionData
{
    public int UserId { get; set; }

    public string EmailAddress { get; set; }

    public string FullName { get; set; }
}

Anwendungsfall:

public class LoginController : Controller {

    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            var profileData = new UserProfileSessionData {
                UserId = model.UserId,
                EmailAddress = model.EmailAddress,
                FullName = model.FullName
            }

            this.Session["UserProfile"] = profileData;
        }
    }

    public ActionResult LoggedInStatusMessage()
    {
        var profileData = this.Session["UserProfile"] as UserProfileSessionData;

        /* From here you could output profileData.FullName to a view and
        save yourself unnecessary database calls */
    }

}

Sobald dieses Objekt serialisiert wurde, können wir es auf allen Controllern verwenden, ohne es erstellen zu müssen oder die Datenbank erneut nach den darin enthaltenen Daten abzufragen.

Injizieren Sie Ihr Session-Objekt mit Dependency Injection

In einer idealen Welt würden Sie ' auf eine Schnittstelle programmieren, nicht auf die Implementierung ' und Ihr serialisierbares Sitzungsobjekt mit Ihrem Inversion of Control-Container Ihrer Wahl in Ihren Controller einfügen (wie in diesem Beispiel (In diesem Beispiel wird StructureMap verwendet, da dies diejenige ist, die ich ' Ich bin am vertrautesten mit).

public class WebsiteRegistry : Registry
{
    public WebsiteRegistry()
    {
        this.For<IUserProfileSessionData>().HybridHttpOrThreadLocalScoped().Use(() => GetUserProfileFromSession());   
    }

    public static IUserProfileSessionData GetUserProfileFromSession()
    {
        var session = HttpContext.Current.Session;
        if (session["UserProfile"] != null)
        {
            return session["UserProfile"] as IUserProfileSessionData;
        }

        /* Create new empty session object */
        session["UserProfile"] = new UserProfileSessionData();

        return session["UserProfile"] as IUserProfileSessionData;
    }
}

Sie würden dies dann in Ihrer Global.asax.cs-Datei registrieren.

Für diejenigen, die sich nicht mit dem Einfügen von Sitzungsobjekten auskennen, finden Sie einen ausführlicheren Blogbeitrag zum Thema hier .

Ein Wort der Warnung:

Es ist erwähnenswert, dass Sitzungen auf ein Minimum beschränkt werden sollten. Große Sitzungen können zu Leistungsproblemen führen.

Es wird auch empfohlen, keine sensiblen Daten (Passwörter usw.) darin zu speichern.

55
Joseph Woodward

So funktioniert der Sitzungsstatus in ASP.NET und ASP.NET MVC:

ASP.NET-Sitzungsstatus - Übersicht

Grundsätzlich tun Sie dies, um einen Wert im Session-Objekt zu speichern:

Session["FirstName"] = FirstNameTextBox.Text;

So rufen Sie den Wert ab:

var firstName = Session["FirstName"];
16

Sie können jede Art von Daten in einer Sitzung speichern:

Session["VariableName"]=value;

Diese Variable dauert etwa 20 Minuten.

0
Ulyses