做例子,用cookie来存储了商品。 添加,修改已经做好了。在删除单条的时候犯难了。 不知道怎么删,如果时间设置过期那么所有的cookie都删除了。 而我只要删一条如 我存储的是商品+数量 用|分割。 1,20|2,20|3,1|4,2
用户点击删除时 应该移除掉的是 一个商品和数量。如删除商品4那么只是把4,2给移除了而不是全部求教怎么搞的?????代码也分享了public class CardShop { public static String CookieName = "SHOPPING_INFO";
/// <summary>
/// 添加商品进购物车
/// </summary>
/// <param name="productId"></param>
/// <param name="num"></param>
/// <returns></returns>
public static bool AddProduct(int productId, int num) {
HttpCookie hc = null;
String oldCookieValue;
String NewValue;
hc = HttpContext.Current.Request.Cookies[CookieName];
if (hc == null) //如果Cookie不存在 则直接新建Cookie 保存商品id和数量;
{
hc = new HttpCookie(CookieName);
hc.Expires = DateTime.Now.AddDays(7);
hc.Value = productId.ToString() + "|" + num.ToString();
}
else //假设Cookie存在 则处理
{
oldCookieValue = hc.Value;
NewValue = AddCookieValue(oldCookieValue, productId, num);
hc.Value = NewValue; } HttpContext.Current.Response.AppendCookie(hc); //Cookie写入Response  
return true; //结束
}
/// <summary>
/// 已存在Cookie则追加商品
/// </summary>
/// <param name="Value"></param>
/// <param name="NewProductId"></param>
/// <param name="Num"></param>
private static string AddCookieValue(string Value, int NewProductId, int Num) {
String NewValue = "";
bool IsAdd = false;
string[] productList = Value.Split(',');
for (int i = 0; i < productList.Length; i++) {
string[] productInfo = productList[i].Split('|');
if (productInfo[0] == NewProductId.ToString()) {
IsAdd = true;
NewValue += productInfo[0] + "|" + ((int.Parse(productInfo[1])) + Num).ToString() + ",";
}
else {
NewValue += productInfo[0] + "|" + productInfo[1] + ",";
} }
if (IsAdd) { NewValue = NewValue.Substring(0, NewValue.Length - 1);
}
else {
NewValue += NewProductId.ToString() + "|" + Num.ToString();
}
return NewValue;
} /// <summary>
/// 获取购物车信息
/// </summary>
/// <returns></returns>
public static string GetShoppingInfo() {
HttpCookie hc = null;
hc = HttpContext.Current.Request.Cookies[CookieName];
if (hc == null) //如果Cookie存在 则直接新建Cookie 保存商品id和数量;
{
return null;
}
else {
return hc.Value;
}
}
}

解决方案 »

  1.   

    我是问cookie怎么删除?
    cookie是客户端的东西,删除首先是没有权限的,怎么弄?只能设置过期,但是过期的话结果是整个结果集都是空的了
      

  2.   

    用Sesson吧比较方便
    Sesson   直接保存list<实体类>   cookie我没搞过。帮不上忙
      

  3.   

    Session是服务器的东西,
    1,卡
    2,每次要判断哪个用户登录的,在查出来
    3,2台以上服务器布置的项目就无法用
    4,想提醒用户你还有没买的东西,而不是第二次来了东西就消失了。
    5,。。
      

  4.   

    建议这样处理:产生随机编号,然后将编号存入cookie,将商品和cookie同时存入数据库,以cookie进行标识。要删除单个商品信息,就只要根据ID删除就可以了
      

  5.   

    .Net用Cookie做购物车操作
      

  6.   

    但是你别忘了 cookie保存只有4k,你这些权限都放在了cookie里,安全性就大大降低了,不推荐
      

  7.   

    什么权限,只放入了ID和数量。没什么机密信息。购物车的容量会限制用户超过cookie大小。 还有楼上,我最不想的就是往数据库里放了~~~~~~~~~~~在看6楼的例子
      

  8.   


     public static void RemoveShoppingCart(int ProductID)
        {
            if (HttpContext.Current.Request.Cookies["ShoppingCart"] == null)
            {
                //Do nothing
            }
            else
            {
                HttpCookie oCookie = (HttpCookie)HttpContext.Current.Request.Cookies["ShoppingCart"];
                //Set Cookie to expire in 3 hours
                char[] sep = { '|' };
                oCookie.Expires = DateTime.Now.AddHours(3);
                //Check if Cookie already contain same item
                string sProdID = oCookie.Value.ToString();            string[] arrCookie = sProdID.Split(sep);
                string[] arrCookie2 = new string[arrCookie.Length - 1];
                            
                int j = 0;
                for (int i = 0; i < arrCookie.Length; i++)
                {
                    if (arrCookie[i].Trim().Remove(arrCookie[i].IndexOf('*')) != ProductID.ToString())
                    {
                        arrCookie2[j] = arrCookie[i];
                        j++;
                    }
                }
                string sCookieID = "";
                for (int i = 0; i < arrCookie2.Length; i++)
                {
                    sCookieID = sCookieID + arrCookie2[i] + "|";
                }
                if (sCookieID.Length > 0)
                {
                    oCookie.Value = sCookieID.Substring(0, sCookieID.Length - 1);
                }
                else
                {
                    oCookie.Value = "";
                }            //Add back into  the HttpContext.Current.Response Objects.
                HttpContext.Current.Response.Cookies.Add(oCookie);
            }
      

  9.   

    看了2位提供源码的 大概明白了  就是把之前的在获取到,然后存起来。 在从中移除。把历史的购物车删了  然后在把移除的结果从新保存一个cookie
      

  10.   

    写个操作cookie的类。google下有
    不能删除cookie,设置其过期。