在cookie变量中分配字符串不能正常工作

时间:2016-12-09 09:47:55

标签: c# asp.net cookies httpcookie

我正在尝试在cookie变量中保存一个字符串。但在调试之后,我看到它只花了一半。

string cs="metadata=res://*/Models.ADModel.csdl|res://*/Models.ADModel.ssdl|res://*/Models.ADModel.msl;provider=System.Data.SqlClient;provider connection string='data source=192.168.10.104;initial catalog=AlarmDirectorDTU;persist security info=True;user id=aduserly;password=PasswordLY;multipleactiveresultsets=True;App=EntityFramework'"
Response.Cookies.Add(new HttpCookie("ConnectionString", cs));

在调试过程中,我看到了

Request.Cookies["ConnectionString"].Value

此Cookie的值为 -

"metadata=res://*/Models.ADModel.csdl|res://*/Models.ADModel.ssdl|res://*/Models.ADModel.msl"

请建议我如何在此cookie变量中保存此完整字符串,提前致谢

2 个答案:

答案 0 :(得分:3)

在ASP.Net中,您可以使用System.Web.HttpUtility在写入cookie之前安全地对cookie值进行编码,并在读取时将其转换回原始格式。

// Encode
HttpUtility.UrlEncode(cookieData);

// Decode
HttpUtility.UrlDecode(encodedCookieData);

这将停止分号,&符号和等号,在将值写入cookie时将值拆分为一堆名称/值对。

您的代码将变为:

string cs="metadata=res://*/Models.ADModel.csdl|res://*/Models.ADModel.ssdl|res://*/Models.ADModel.msl;provider=System.Data.SqlClient;provider connection string='data source=192.168.10.104;initial catalog=AlarmDirectorDTU;persist security info=True;user id=aduserly;password=PasswordLY;multipleactiveresultsets=True;App=EntityFramework'";

var encodedData = HttpUtility.UrlEncode(cs);

Response.Cookies.Add(new HttpCookie("ConnectionString", encodedData));
var cookieData = Request.Cookies["ConnectionString"].Value; 

var decodedData = HttpUtility.UrlDecode(cookieData);

答案 1 :(得分:2)

Cookie由浏览器通过分号分隔处理。您可以使用System.Web.HttpUtility安全地对Cookie进行编码。

//encode
HttpUtility.UrlEncode(cs);