购物车的ID设为CartID.在设计数据库时,使用不是整型字段,而是使用一个Char(36)字段,它用来保存GUID字符串.(如果知道将要存储到数据库表字段中的精确长度,那么使用Char类型要比VarChar类型更好些)

 GUID(全局唯一标识符)可以确保在同一时空中所有机器都是唯一的.两次生成的GUID是绝不会相同的.GUID字符串的长度为36个字符:GUID本身是36个字节,另外还有四个是用来分隔字符串的连字符.

 购物车的业务层代码一般都放在一个单独的类中,假设类名为ShoppingCartAccess在这个类中,将使用ShoppingCartID 这个属性来设定购物车ID,它是一个只读属性,它将返回调用该方法的访问者的相关的CartID.在该属性中,将使用一个名为Shop_CartID和同名的会话变量(session)来跟踪访问者的购物车记录.


(1) 首先,在配置文件web.config中设置cookie的过期时间.
   <appSettings>
   <add key="CartPersistDays" value="10" />

(2)  在ShoppingCartAccess.cs文件中,先要添加一个指向using System.Data.Common程序集的引用,然后编写shoppingCartID属性.

 using System.Data.Common;

 public class ShoppingCartAccess
 {

  private static string shoppingCartID
    {
        get
        {
            HttpContext context = HttpContext.Current;
            string cartID;
            object cartIdSession = context.Session["Shop_CartID"];

            if (cartIdSession != null)
                cartID = cartIdSession.ToString();
            if (cartID != "")
                return cartID;
            else
            {
                if (context.Request.Cookies["Shop_CartID"] != null)
                {
                    cartID = context.Request.Cookies["Shop_CartID"].Value;
                    context.Session["Shop_CartID"] = cartID;
                    return cartID;
                }
                else
                {
                    cartID = Guid.NewGuid().ToString();

                    HttpCookie cookie = new HttpCookie("Shop_CartID", cartID.ToString());

                    int howManyDays = Int32 .Parse (ConfigurationManager .AppSettings ["CartPersistDays"]);
                    DateTime currentDate = DateTime.Now;
                    TimeSpan timeSpan = new TimeSpan(howManyDays, 0, 0, 0);
                    DateTime expirationDate = currentDate.Add(timeSpan);
                    cookie.Expires = expirationDate;

                    context.Response.Cookies.Add(cookie);
                    context.Session["Shop_CartID"] = cartID;
                    return cartID.ToString();

                }

 
          }
      }
  }

下面来对上面的代码解释下:
(1) 检查CartID是否已存储在会话中,如果是,使用该值.
(2) 如果在会话中没发现该CartID,则尝试从cookie中获取.这通常发生在顾客在一段时间后重返网站并且启用了cookie时,如果在cookie中找到这个CartID,那  么使用该值,并且把它存到会话中,以便下次可以直接从会话中获取,无需再次从客户端的cookie中读取.
(3) 如果在会话和cookie中都没有这个ID,那么就生成一个新的GUID,并在会话和cookie中都保存一份,这实际上就是创建了一个新的购物车.

  当你为cookie设置一个过期时间时,那么浏览器就会将这个cookie以文件的形式保存起来.我们是将cookie的过期时间设置为10天,也就是说访问者的购物车在其创建后的10天内都会存在.如果没有指定过期时间,那么该cookie将只在当前浏览器会话中保存.