ASP.NET C#中Cookie存储含&的密码丢失末尾字符的原因与解决方法
原因分析
HTTP Cookie的内容遵循URL编码规范,&是URL中键值对的分隔符。当你直接将包含&的字符串赋值给Cookie.Value时,ASP.NET在输出Cookie时,未编码的&会被解析为参数分隔标记,导致&之后的内容被截断。比如Sl98&&会被识别为Sl98&加一个空参数,最终存储的有效内容只剩Sl98&。
修复方案
需要对Cookie的Value进行URL编码,确保特殊字符(包括&)被转义为安全的编码格式,读取时再解码还原原始内容。
设置Cookie时编码
HttpCookie passCookie = new HttpCookie("passC"); // 对Session中的密码值进行URL编码 passCookie.Value = HttpUtility.UrlEncode(Session["pass"].ToString()); passCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(passCookie);
读取Cookie时解码
if (Request.Cookies["passC"] != null) { // 解码还原原始字符串 string originalPass = HttpUtility.UrlDecode(Request.Cookies["passC"].Value); // 后续业务逻辑处理 }
URL编码会将&转换为%26,这样Cookie在传输和存储过程中不会被错误解析,读取时解码就能完整还原包含&的原始密码。
内容的提问来源于stack exchange,提问作者Mike Radunski
相关产品推荐
相关产品推荐

