none
asp.net中Cookies如何修改或删除子键 RRS feed

  • 问题

  • HttpCookie myCookie = new HttpCookie("CookieCar");
    以下是循环赋值
    myCookie.Values.Add("User", "张三");
    myCookie.Values.Add("Hot", "1"); myCookie.Values.Add("User", "李四");
    myCookie.Values.Add("User", "MSDN"); myCookie.Values.Add("Email", "a@a.com");
    myCookie.Values.Add("Email", "b@b.com");
    myCookie.Values.Add("QQ", "555");
    ...
    读取myCookie后结果如下:
    User="张三,李四,CSDN";
    Hot="1";
    Email="a@a.com,b@b.com";
    QQ="555";
    string[] arrUser = myCookie.Values.GetValues("User");
    for (int i = 0; i < arrUser.Length; i++)
    {
      if(i == 1)
      {
        myCookie.Values.GetValues("User").SetValue("统一", i);//为什么这个会无效,没办法修改????难道这样的写法有问题吗
        break;
      }
    }
    还有个问题,如果我想把["User"]下面的"张三"删除掉如何写?
    • 已编辑 TeamWei 2011年3月9日 2:13
    2011年3月9日 1:30

答案

  • 你好!

    一般用法一个键只对应一个值,你的问题可以通过下面的方式解决。

    string[] arrUser = myCookie.Values.GetValues("User");
    arrUser.SetValue("abc", 0);
    myCookie.Values.Remove("User");
    foreach (var s in arrUser)
      myCookie.Values.Add("User", s);
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 TeamWei 2011年3月9日 3:44
    2011年3月9日 3:16
    版主

全部回复

  • 你好!

    GetValues("User") 的返回值是 string[] 所以,你上述代码等同于

    var obj = myCookie.Values.GetValues("User");
    obj.SetValue("123123");//仅是对字符串数组进行了设置。

    改为调用 Values.Set 方法就对了


    知识改变命运,奋斗成就人生!
    2011年3月9日 2:12
    版主
  • myCookie.Values.Set("User","统一");//这样的写法吗?不过这样写就把整个["User"]的值变成一样的了,我想修改的是["User"]下面的某个集合

    还有如何删除["User"]下面某个集合

    2011年3月9日 2:44
  • 你好!

    一般用法一个键只对应一个值,你的问题可以通过下面的方式解决。

    string[] arrUser = myCookie.Values.GetValues("User");
    arrUser.SetValue("abc", 0);
    myCookie.Values.Remove("User");
    foreach (var s in arrUser)
      myCookie.Values.Add("User", s);
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 TeamWei 2011年3月9日 3:44
    2011年3月9日 3:16
    版主
  • 感谢版主的解答,问题解决!
    2011年3月9日 3:43