What the general way of storing custom objects in sessions?
I\'m planning on keeping my cart in a session throughout the web application. When that user logs out, th
ASP.NET session corresponds to browser session - it is independent of whether user is authenticated (logged in) or not. So you should not have any issue with regards to guest/member sessions. I would advise you to expose the current shopping cart via static accessor property - for example
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
}
Few things to consider here:
Generic Extension Method definition in a static class:
public static T GetSession<T>(string key) => HttpContext.Current?.Session?[key] != null ? (T)HttpContext.Current.Session[key] : default(T);
usage example implicit
var myCart = GetSession<ShoppingCart>("myKey");
inference
ShoppingCart myCart2 = GetSession("myKey");
check if exists
if(myCart != default(ShoppingCart)){
// do stuff
}
Add it to a master page or you could add a static property to you ShoppingCart object
public static ShoppingCart GetCurrent
{
get
{
if(HTTPContext.Current.Session["CurrentCart"] == null)
{
HTTPContext.Current.Session["CurrentCart"] = new ShoppingCart();
}
return HTTPContext.Current.Session["CurrentCart"] as ShoppingCart;
}
}