asp.net中购物车的两种存储方式Session和Cookie的应用实例

asp.net中购物车的两种存储方式Session和Cookie的应用实例 收藏

1.这是用Cookie存储的购物车的几种常用的操作:

 

/// <summary>

/// 使用Cookie的购物车

/// </summary>

public class CookieCar {

   public const string COOKIE_CAR = "Car";     //cookie中的购物车

 

   /// <summary>

   /// 无参数的构造方法

   /// </summary>

   public CookieCar() {

    }

 

   /// <summary>

   /// 添加商品到购物车

   /// </summary>

   /// <param name="id"></param>

   /// <param name="quantity"></param>

   public void AddProductToCar(string id, string quantity) {

       string product = id + "," + quantity;

       //购物车中没有该商品

       if (!VerDictCarIsExit(id)) {

           string oldCar = GetCarInfo();

           string newCar = null;

           if (oldCar != "") {

                oldCar += "|";

           }

           newCar += oldCar + product;

           AddCar(newCar);

       }

       else {

           int count = int.Parse(GetProductInfo(id).Split(',')[1].ToString());

           UpdateQuantity(id, count + 1);

       }

    }

 

   /// <summary>

   /// 添加商品的数量

   /// </summary>

    /// <paramname="id"></param>

   public void UpdateQuantity(string id, int quantity) {

       //得到购物车

       string products = GetCarInfo();

       products = "|" + products + "|";

       string oldProduct = "|" + GetProductInfo(id) + "|";

       if (products != "") {

           string oldCar = GetCarInfo();

           string newProduct = "|" + id + "," + quantity +"|";

           products = products.Replace(oldProduct, newProduct);

           products = products.TrimStart('|').TrimEnd('|');

            AddCar(products);

       }

    }

 

   /// <summary>

   /// 得到购物车

   /// </summary>

   /// <returns></returns>

   public string GetCarInfo() {

       if (HttpContext.Current.Request.Cookies[COOKIE_CAR] != null) {

           return HttpContext.Current.Request.Cookies[COOKIE_CAR].Value.ToString();

       }

        return "";

    }

 

   /// <summary>

   /// 根据ID得到购物车中一种商品的信息

   /// </summary>

   /// <param name="id"></param>

   /// <returns></returns>

   private string GetProductInfo(string id) {

       string productInfo = null;

       //得到购物车中的所有商品

        string products = GetCarInfo();

       foreach (string product in products.Split('|')) {

           if (id == product.Split(',')[0]) {

                productInfo = product;

                break;

           }

       }

       return productInfo;

    }

 

   /// <summary>

   /// 加入购物车  

   /// </summary>

   private void AddCar(string product) {

       HttpCookie car = new HttpCookie(COOKIE_CAR, product);

       car.Expires = DateTime.Now.AddDays(7);

       HttpContext.Current.Response.Cookies.Remove(COOKIE_CAR);

       HttpContext.Current.Response.Cookies.Add(car);

    }

 

   /// <summary>

   /// 判断商品是否存在

   /// </summary>

   /// <param name="id"></param>

   /// <returns></returns>

   private bool VerDictCarIsExit(string id) {

       //存在的标志: true 有, false 没有

       bool flag = false;

       //得到购物车中的所有商品

       string products = GetCarInfo();

       foreach (string product in products.Split('|')) {

           if (id == product.Split(',')[0]) {

                flag = true;

                break;

           }

        }

       return flag;

    }

 

   /// <summary>

   /// 通过商品编号删除订单

   /// </summary>

   /// <param name="id"></param>

   public void DeleteProduct(string id) {

       string oldProduct = GetProductInfo(id);

       oldProduct = "|"+oldProduct+"|";

        string products = GetCarInfo();

       if(products != "") {

           products = "|"+products+"|";

           products = products.Replace(oldProduct, "|");

           products = products.TrimStart('|').TrimEnd('|');

           AddCar(products);

       }

    }

 

   /// <summary>

   /// 晴空购物车

   /// </summary>

   public void ClearCar() {

       AddCar("");

    }

 

   /// <summary>

   /// 确认订单

   /// </summary>

   public void ConfirmOrder(System.Web.UI.Page page, doubleorderTotalPrice, User user) {

       //得到订单信息

       string products = GetCarInfo();

       if (products != "") {

           string message =null;

           if (ProductManager.OrderConfirm(products, orderTotalPrice, user, outmessage)) {

                ClearCar();

           }

           Javascript.Alert(page, message, "Default.aspx");

       }

       else {

           Javascript.Alert(page, "订单为空,请选择商品!", "ProductList.aspx");

       }

    }

}

 

/// <summary>

   /// 得到购物车数据

   /// </summary>

   public DataSet GetCarData(GridView gv) {

       string carInfo = new CookieCar().GetCarInfo();

       if (carInfo != "") {

           string sql = "";

           foreach (string product in carInfo.Split('|')) {

                int id =int.Parse(product.Split(',')[0].ToString());

                int buyCount =int.Parse(product.Split(',')[1].ToString());

                if (sql != "") {

                   sql += " union";

                }

                sql += "select *, " +buyCount + " as buyCount, Price*" + buyCount + " as totalPricefrom Products where Id = " + id;

           }

           TotalPrice(gv);       //计算总价

           return ProductManager.GetCarBySql(sql);

       }

       else {

           Javascript.GoError("购物车为空,请选择商品!");

       }

       return null;

    }

 

   /// <summary>

   /// 计算总价

   /// </summary>

   public double TotalPrice(GridView gv) {

       double totalCarPrice = 0d;

       foreach (GridViewRow row in gv.Rows) {

           int rowIndex = row.RowIndex;

           double totalPrice =double.Parse((gv.Rows[rowIndex].FindControl("lblTotalPrice") asLabel).Text.ToString());

           totalCarPrice += totalPrice;

       }

       return totalCarPrice;

    }

 

2.这是用Session存储的购物车:

 

/// <summary>

/// 使用Session的购物车

/// </summary>

public class SessionCar {

   private const string SESSION_CAR = "Car";

 

   /// <summary>

   /// 无参数的购物车

   /// </summary>

   public SessionCar() {

    }

 

   /// <summary>

   /// 添加商品到购物车

   /// </summary>

   public void AddCart(Product product) {

       if (HttpContext.Current.Session["CurrentUser"] != null) {

           if (HttpContext.Current.Session[SESSION_CAR] == null) {

                BuildCart(product);

           }

           else {

                DataTable cart =HttpContext.Current.Session[SESSION_CAR] as DataTable;

                if (ExistProduct(cart,product.Id)) {

                    this.BuildSession(cart, product);

                }

           }

           HttpContext.Current.Response.Redirect("Cart.aspx");

       }

       else {

           HttpContext.Current.Response.Redirect("Login.aspx");

       }

    }

 

   /// <summary>

   /// 已有产品

   /// </summary>

   /// <param name="cart"></param>

   /// <returns></returns>

   public bool ExistProduct(DataTable cart, int id) {

       foreach (DataRow dr in cart.Rows) {

           if (dr["Id"].ToString().Equals(id.ToString())) {

                dr["buyCount"] =Convert.ToInt32(dr["buyCount"]) + 1;

               HttpContext.Current.Session[SESSION_CAR] = cart;

               HttpContext.Current.Response.Redirect("Cart.aspx");

           }

       }

       return true;

    }

 

   /// <summary>

   /// 新建购物车

   /// </summary>

   public void BuildCart(Product product) {

       DataTable cart = new DataTable();

       DataColumn[] dc = new DataColumn[] {

           new DataColumn("Id"),

           new DataColumn("Name"),

            newDataColumn("buyCount"),

           new DataColumn("Price"),

           new DataColumn("Picture"),

           new DataColumn("Number"),

           new DataColumn("SellNumber")

       };

       cart.Columns.AddRange(dc);

       BuildSession(cart, product);

    }

 

   /// <summary>

   /// 添加新商品

   /// </summary>

   /// <param name="cart"></param>

   public void BuildSession(DataTable cart, Product product) {

       DataRow dr = cart.NewRow();

       dr[0] = product.Id;

       dr[1] = product.Name;

       dr[2] = "1";

       dr[3] = product.Price;

       dr[4] = product.Picture;

       dr[5] = product.Number;

       dr[6] = product.SellNumber;

       cart.Rows.Add(dr);

       HttpContext.Current.Session[SESSION_CAR] = cart;

    }

 

public DataTable GetCar() {

       if (HttpContext.Current.Session[SESSION_CAR] != null) {

           DataTable car = HttpContext.Current.Session[SESSION_CAR] as DataTable;

           return car;

       }

       else {

           return null;

        }

    }

 

   /// <summary>

   /// 计算总价

   /// </summary>

   /// <param name="cart"></param>

   public double TotalPrice(DataTable cart) {

       double total = 0;

       foreach (DataRow dr in cart.Rows) {

           total += Convert.ToDouble(dr["Price"]) *(Convert.ToInt32(dr[2].ToString()));

       }

       return total;

    }

}

 

实在

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/devidpitoushi/archive/2009/05/12/4173121.aspx

posted @ 2011-10-12 21:19  SOD_QWER  阅读(209)  评论(0)    收藏  举报