Shopping bags have always been one of My Favorites - I have implemented quite a lot flavors of these, with the last one being an XML implementation in ASP (presented in my latest book "Teach Yourself ASP 2.0 in 24 Hours"). This one was fairly neat in that you were storing XML as a String Session variable, however, the code didn't look too good and you had to be knowledgeable about XML.
This is why I not only ported it to a Visual Basic component, but also extended the implementation by some important Details. In addition to storing common shopping bag data (product id, product name, price per unit, quantity), it automatically totals an item as well as the entire shopping bag. And you don't have to know anything about XML.
If the properties that are automatically stored for each product are not sufficient for your shopping solution, you can easily store additional properties via calls to item.SetValue(...) and retrieve them again with item.GetValue(...). Guess why it is called the Xtensible Shopping Bag (XSB)! Now I never again have to implement a new shopping bag solution.
The two outstanding features of XSB are: extensibility via custom properties, and scalability because you don't need to store an object in a Session variable - the XML data is sufficient, which is very small. See the sample shopping solution on how to implement it!