日期:2014-05-18  浏览次数:20451 次

cookie乱码
为什么cookie在VS里运行时没问题,一到IIS里就乱码?

我知道是编码的问题,用UrlEncode/UrlDecode就能解决问题,但是有几个问题:

1. VS里没问题,IIS里就有问题,是不是IIS的设置有问题?

2. 大家都说是ASP与ASP.net共享Cookie时才会有这种问题,就连微软的解释也是这样:“默认情况下 ASP.NET 不以 UrlEncode 格式对 Cookie 进行编码”(http://support.microsoft.com/default.aspx?scid=kb;zh-cn;313282),而我没有用到ASP和ASP.net共享Cookie,即使在同一个页面里接连写读cookie都会乱码。

3. 真正蹊跷的在这里,请大耐心看完并自己试试,分别建一个a.asp和b.aspx,页面不要设编码类型
a.asp
HTML code
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
    Response.Cookies("a") = "你好"
    Response.Write(Request.Cookies("a"))
    Response.Write(Request.Cookies("b"))
%>

b.aspx
HTML code
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
    Response.Cookies("b").Value = "你好"
    Response.Write(Request.Cookies("a").Value)
    Response.Write(Request.Cookies("b").Value)
%>

在IIS打开网页,先打开a.asp,再打开b.aspx,先打开b.aspx会报错,因为Cookies("a")未定义。
这时,b.aspx中显示“%E4%BD%A0%E5%A5%BD你好”,这个容易理解,就像微软所说,“默认情况下 ASP.NET 不以 UrlEncode 格式对 Cookie 进行编码”,
精彩的在这里,刷新一下b.aspx,“%E4%BD%A0%E5%A5%BD浣犲ソ”,后面的变乱码了,而a.asp刷新后显示“你好你好”,再刷新也不变。

这样就有点说不通了,既然默认情况下 ASP.NET 不以 UrlEncode 格式对 Cookie 进行编码,那为什么a.asp中两个cookie都显示正常?
b.aspx中第一次显示的内容印证了“默认情况下 ASP.NET 不以 UrlEncode 格式对 Cookie 进行编码”,但为什么刷新一遍asp.net自己的cookie就乱码?

不知大家有什么高见?

------解决方案--------------------
Cookie中存中文是会出现问题的,一般对中文编码后再存入。
请看这个帖子也你的类似
http://topic.csdn.net/u/20071002/13/d34c6478-f48c-4236-9579-5e07ccaaff76.html?seed=1064251217

这是我的Blog的相关文章
http://blog.csdn.net/octverve/archive/2007/10/02/1809865.aspx

希望对你有帮助。
------解决方案--------------------
强制转换,强制转回