一.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("無煙鍋");
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.UrlEncode
System.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode