Quelle est la façon générale de stocker des objets personnalisés dans les sessions. Je prévois de garder mon panier en session tout au long de l'application Web. Lorsque cet utilisateur se déconnecte, la session est effacée.
Class ShoppingCart {
private List<CartItem> Items = new List<CartItem>();
public ShoppingCart()
{
this.Items = new List<CartItem>();
if (HttpCurrent.Current["Cart"]!=null])
{
this.Items = ShoppingCart.loadCart(HttpCurrent.Current["User"]);
}
}
}
Lorsque l'utilisateur se connecte, je place le panier dans une session comme
Session["Cart"] = new ShoppingCart();
Mais dois-je écrire Session ["Cart"] sur chaque page. N'y a-t-il pas un moyen plus simple de le faire? Qu'en est-il également de la session de panier d'invité? Où vais-je déclarer cela?
Je veux que chaque session utilisateur soit stockée dans une session unique. Pour qu'il n'y ait aucun mélange entre la session invité et la session membre.
La session ASP.NET correspond à la session du navigateur - elle est indépendante du fait que l'utilisateur soit authentifié (connecté) ou non. Vous ne devriez donc avoir aucun problème en ce qui concerne les sessions invité/membre. Je vous conseille d'exposer le panier actuel via la propriété d'accesseur statique - par exemple
Class ShoppingCart {
public static ShoppingCart Current
{
get
{
var cart = HttpContext.Current.Session["Cart"] as ShoppingCart;
if (null == cart)
{
cart = new ShoppingCart();
HttpContext.Current.Session["Cart"] = cart;
}
return cart;
}
}
... // rest of the code
}
Peu de choses à considérer ici:
Ajoutez-le à une page maître ou vous pouvez ajouter une propriété statique à votre objet ShoppingCart
public static ShoppingCart GetCurrent
{
get
{
if(HTTPContext.Current.Session["CurrentCart"] == null)
{
HTTPContext.Current.Session["CurrentCart"] = new ShoppingCart();
}
return HTTPContext.Current.Session["CurrentCart"] as ShoppingCart;
}
}
Définition de la méthode d'extension générique dans une classe statique:
public static T GetSession<T>(string key) => HttpContext.Current?.Session?[key] != null ? (T)HttpContext.Current.Session[key] : default(T);
exemple d'utilisation implicite
var myCart = GetSession<ShoppingCart>("myKey");
inférence
ShoppingCart myCart2 = GetSession("myKey");
vérifier s'il existe
if(myCart != default(ShoppingCart)){
// do stuff
}