日期:2014-05-17  浏览次数:20441 次

asp.net cookie问题
Request.Cookies["pro"]为什么这里面没有值?

附上cookie代码:
 string[] strPro;
  int count = 0; //记录strPro数据中有没有包含重复的ID
  private void Cookies(string proID) {
  if (Request.Cookies[proID]!=null) //如果cookies存在的话,就在原先cookies上修改
  {
  string pro = Request.Cookies[proID]["proID"].ToString();
  string times = Request.Cookies[proID]["times"].ToString();
  if (pro.Split(',').Length>0)
  {
  strPro = pro.Split(',');
  }
  //循环strPro数组,判断数组中有没有包含重复的ID,有的话count+1
  for (int i = 0; i < strPro.Length; i++)
  {
  if (strPro[i]==proID)
  {
  count += 1;
  }
  }
  //count==0代表数组中没有重复的数据,反之
  if (count==0)
  {
  pro= pro + "," + proID;
  times = times + "," + System.DateTime.Now.ToString();

  //修改cookies
  Response.Cookies[proID]["proID"] = pro;
  Response.Cookies[proID]["times"] = times;
  }
  }
  else //不存在cookies的话,创建一个新的cookies
  {
  HttpCookie cookie = new HttpCookie("pro"); //定义cookie对象
  DateTime dt = DateTime.Now; //定义时间对象
  TimeSpan ts = new TimeSpan(10, 10, 1000, 1000000); //cookie有效作用时间
  cookie.Expires = dt.Add(ts); //添加作用时间
  //增加属性
  cookie.Values.Add("proID", proID);
  cookie.Values.Add("times", System.DateTime.Now.ToString());
  Response.AppendCookie(cookie); //确定写入cookie中
  }
  }

------解决方案--------------------
HttpCookie cookie = new HttpCookie("pro"); 
cookie.Values.Add("proID", proID);
cookie.Values.Add("times", System.DateTime.Now.ToString());
Response.AppendCookie(cookie);

这种写法,cookie中永远都只有一个键为“pro”的cookie,他的值为键值对。
例如上面这几句代码会生成如下的cookie:
键:pro
值:proId=abc&times=2012-10-22 2:05

对于proId和times的取值:
 string pro = Request.Cookies["pro"]["proID"];//第一个键是恒定的
 string times = Request.Cookies["pro"]["times"];//第一个键是恒定的
所以你上面的代码时候有些问题。

添加多个cookie:
C# code

            HttpCookie cookie = new HttpCookie("cookie_1");
            cookie.Value = "value_1";
            HttpCookie cookie2 = new HttpCookie("cookie_2");
            cookie2.Value = "value_2";
            Response.AppendCookie(cookie);
            Response.AppendCookie(cookie2);