[网络收集]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>
    /// <param name="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, double orderTotalPrice, User user) {
        //得到订单信息
        string products = GetCarInfo();
        if (products != "") {
            string message =null;
            if (ProductManager.OrderConfirm(products, orderTotalPrice, user, out message)) {
                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 totalPrice from 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") as Label).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"),
            new DataColumn("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;
    }
}

摘自http://hi.baidu.com/devid_pitoushi/blog/item/44419339d18ae0cad4622537.html

原文地址:https://www.cnblogs.com/lushuicongsheng/p/1877241.html