为什么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
<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
<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就乱码?不知大家有什么高见?