Je suis nouveau sur ASP.NET MVC. J'ai déjà utilisé PHP et il était facile de créer une session et de sélectionner des enregistrements d'utilisateurs en fonction des variables de session actuelles.
J'ai cherché partout sur Internet un didacticiel pas à pas qui me montre comment créer et utiliser des sessions dans mon application C # ASP.NET MVC 4. Je souhaite créer une session avec des variables utilisateur auxquelles je peux accéder de n'importe où dans mes contrôleurs et pouvoir utiliser les variables de mes requêtes LINQ.
-Merci d'avance!
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;
En raison de la nature sans état du Web, les sessions sont également un moyen extrêmement utile de faire persister des objets dans des demandes en les sérialisant et en les stockant dans une session.
Si vous devez accéder à des informations régulières dans votre application pour enregistrer des appels de base de données supplémentaires à chaque requête, ces données peuvent être stockées dans un objet et non sérialisées à chaque requête, comme suit:
Notre objet sérialisable et réutilisable:
[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 ni à interroger à nouveau la base de données pour connaître les données qu’il contient.
Injectez votre objet de session en utilisant Dependency Injection
Dans un monde idéal, vous ' programmez sur une interface et non sur une implémentation ' et injectez votre objet de session sérialisable dans votre contrôleur à l'aide de votre conteneur de choix Inversion of Control, comme ceci (cet exemple utilise StructureMap comme tel). Je suis le plus familier avec).
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 enregistrez alors ceci dans votre fichier Global.asax.cs
.
Pour ceux qui ne sont pas familiarisés avec l'injection d'objets de session, vous pouvez trouver un article de blog plus détaillé sur le sujet ici .
Un mot d'avertissement:
Il convient de noter que les sessions doivent être réduites au minimum. De grandes sessions peuvent commencer à causer des problèmes de performances.
Il est également recommandé de ne pas y stocker de données sensibles (mots de passe, etc.).
Voici comment fonctionne l'état de session dans ASP.NET et ASP.NET MVC:
Présentation de l'état de session ASP.NET
En gros, vous faites ceci pour stocker une valeur dans l'objet Session:
Session["FirstName"] = FirstNameTextBox.Text;
Pour récupérer la valeur:
var firstName = Session["FirstName"];
Vous pouvez stocker tout type de données dans une session en utilisant:
Session["VariableName"]=value;
Cette variable durera environ 20 minutes.