У меня ужасное время, пытаясь понять это, и поиск не приносит никаких хороших результатов.
Я создал файл cookie на моей странице с JQuery
var cookieData = {
tb1Relation: $("#<%= tb1Relation.ClientID %>").val(),
tb2Fname: $("#<%= tb2Fname.ClientID %>").val()
}
$.cookie("Relation", $.param(cookieData));
Но когда я получаю код, я могу видеть этот файл cookie, но значения не разделены, потому что он закодирован, поэтому он рассматривает его как одно значение вместо нескольких. Так:
Request.Cookies("Relation")("tb1Relation")
показывает как ничто
и Request.Cookies("Отношение"). Значение = "tb1Relation% 3Dsomething% 26tb2Fname% 3Dsomethingelse"
Из того, что я могу сказать, потому что файлы cookie urlencoded, но я не могу понять, как их unencode для этого объекта Request.Cookies.
Мой последний случай сценарий заключается в следующем, но его ужасно, и я действительно хочу этого избежать.
Request.Cookies("Relation").Value = HttpUtility.UrlDecode(Request.Cookies("Relation").Value)
Dim cookiesSplit() As String = Request.Cookies("formData2").Value.Split("&")
'Splits the first array entry into id/val - Really lame though
Dim cookieIdVal() As String = cookiesSplit(0).Split("=")
Какие-нибудь лучшие решения, которые я полностью потерял?
Изменение: исправлен некоторый код, потому что я выглядел так, как будто я указывал на неправильную вещь. Должен иметь больше смысла сейчас
Поэтому после большого расследования я обнаружил, что мне пришлось добавить:
$.cookie.raw = true;
перед созданием файла cookie, и теперь я могу получить доступ к файлу cookie обычным способом в коде
Request.Cookies("CookieName")("cookieKey")
Может быть, это поможет... Мне пришлось прочитать cookie обратно в текстовое поле в коде, но текст файла cookie был похож на ваш "test1% 3Dsomething% 26test2% 3Dsomethingelse", поэтому мне пришлось с UrlDecode
private void CheckForCookieText()
{
string ConclusionText = SystemCookies.getSingleCookie("txtRecommended", "");
txtRecommended.Text = (ConclusionText.Trim().Length > 0) ? HttpUtility.UrlDecode(ConclusionText) : "";
}