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, the session will be cleared.
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"]); } } }
When the user signs in, I place the cart in a session, like:
Session["Cart"] = new ShoppingCart();
But do I have to write Session["Cart"]
on each and every page? Isn't there an easier way to do this? Also what about the Guest cart session? Where will I declare that?
I want each user session stored in a unique session, so that there's no mixing up between the guest session and the member session.
The Session object provides a dynamic, associative array into which you can store information. You can store scalar variables and object variables into the Session object. You can store user preferences in the Session object, and then access that preference to determine what page to return to the user.
It means you need persist your session in database at appropriate point. You may use out of process session storage (database or different server) - you have to mark your shopping cart class as serializable in such case. There is performance cost to out-of-process sessions.
Yes, you can store any object (I assume you are using ASP.NET with default settings, which is in-process session state): Session["test"] = myList; You should cast it back to the original type for use: var list = (List<int>)Session["test"]; // list.
You can use the Session object to store information needed for a particular user session. Variables stored in the Session object are not discarded when the user jumps between pages in the application; instead, these variables persist for the entire user session.
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:
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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With