asp.net-mvc - tutoriel - mvc c# example




Comment utiliser des sessions dans une application ASP.NET MVC 4? (3)

Je suis nouveau à ASP.NET MVC. J'ai déjà utilisé PHP auparavant et il était facile de créer une session et de sélectionner des enregistrements d'utilisateurs en fonction des variables de session en cours.

J'ai regardé partout sur Internet pour un tutoriel simple étape par étape qui peut me montrer comment créer et utiliser des sessions dans mon application C # ASP.NET MVC 4. Je veux créer une session avec des variables utilisateur auxquelles je peux accéder depuis n'importe où dans mes contrôleurs et être capable d'utiliser les variables dans mes requêtes LINQ.

-Merci d'avance!


En raison de la nature sans état du Web, les sessions sont également un moyen extrêmement utile de conserver les objets à travers les requêtes en les sérialisant et en les stockant dans une session.

Un cas d'utilisation parfait pourrait être si vous avez besoin d'accéder à des informations régulières sur votre application, pour enregistrer des appels de base de données supplémentaires sur chaque requête, ces données peuvent être stockées dans un objet et non sérialisées sur chaque requête, comme ceci:

Notre objet réutilisable et sérialisable:

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

    public string EmailAddress { get; set; }

    public string FullName { get; set; }
}

Cas d'utilisation:

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 */
    }

}

Une fois que cet objet a été sérialisé, nous pouvons l'utiliser sur tous les contrôleurs sans avoir à le créer ou interroger à nouveau la base de données pour les données qu'il contient.

Injectez votre objet de session à l'aide de l'injection de dépendances

Dans un monde idéal, vous " programmez une interface, pas une implémentation " et injectez votre objet de session sérialisable dans votre contrôleur en utilisant votre conteneur Inversion of Control de votre choix (cet exemple utilise StructureMap car c'est celui que je connais le mieux ).

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;
    }
}

Vous devez ensuite l'enregistrer dans votre Global.asax.cs .

Pour ceux qui ne sont pas familiers avec l'injection d'objets de session, vous pouvez trouver un article de blog plus approfondi sur le sujet here .

Un mot d'avertissement:

Il convient de noter que les sessions doivent être réduites au minimum, les grandes sessions peuvent entraîner des problèmes de performances.

Il est également recommandé de ne pas y stocker de données sensibles (mots de passe, etc.).


Essayer

//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;

Voici comment fonctionne l'état de la session dans ASP.NET et ASP.NET MVC:

Présentation de l'état de la session ASP.NET

Fondamentalement, vous faites cela pour stocker une valeur dans l'objet Session:

Session["FirstName"] = FirstNameTextBox.Text;

Pour récupérer la valeur:

var firstName = Session["FirstName"];




session-variables