一.cookie的名稱或子cookie的名稱不能為中文,否則無法獲得cookie
這個好辦,名稱不用中文即可
二.cookie的值為中文時候,取cookie的值會出現亂碼
解決辦法:存取cookie時候先解碼和編碼
存cookie,進行編碼:
cookie.Value = HttpUtility.UrlEncode("上海");
取cookie時候,進行解碼:cookieValue = HttpUtility.UrlDecode(cookie.Value);
另外注意:
取子cookie時候,應該先解碼,再根據%號分解,才能取到子cookie的值.
寫Cookie里,一定要加上UrlEncode,用Request讀Cookie時,一定要加上UrlDecode
示例如下:PRotected void Page_Load(object sender, EventArgs e) { HttpCookie GoodList = null;
//如果GoodList不為空,則GOODID+1,GoodsName加"樂無煙" if (Request.Cookies["GoodList"] != null) { GoodList = Request.Cookies["GoodList"]; GoodList.Values["GoodsID"] = Server.UrlEncode(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsID"]) + ",1"); GoodList.Values["GoodsName"] = Server.UrlEncode(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsName"]) + ",樂無煙"); GoodList.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(GoodList); } else { //初次寫入Cookie GoodList = new HttpCookie("GoodList"); GoodList.Values["GoodsID"] = Server.UrlEncode("2"); GoodList.Values["GoodsName"] = Server.UrlEncode("無煙鍋"); GoodList.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(GoodList); }
Response.Write(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsID"]) + "<br/>"); Response.Write(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsName"]) + "<hr/>");}
中文cookie的問題,在Windows 2000正常,在Windows 2003 sp1下會偶爾出現亂碼(遇到雙字節特殊字符時候,例子:「`蹆絀 ),在windows 2003 SP2下基本亂碼
解決辦法:采用Server.UrlEncode(); Server.UrlDecode();Cookie["MyCookie"] = Server.UrlEncode("中文")Response.Write(Server.UrlDecode(Request.Cookies("MyCookie").Value()))編碼和解碼。
另外編碼和解碼要一致 System.Web.HttpUtility.UrlDecode 和 System.Web.HttpUtility.UrlEncodeSystem.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhdd1234/archive/2009/05/03/4145147.aspx
新聞熱點
疑難解答