Использование cookie в asp.net mvc С#
Я хочу зарегистрировать параметр нескольких страниц на своем веб-сайте, используя cookie. Я попробовал приведенный ниже код, но не так, как хочу:
public ActionResult Index(int? dep, int? cat)
{
......
string theDept = Request.QueryString["dep"];
HttpCookie cookie = new HttpCookie("search");
cookie.Values["dep_name"] = theDept;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
return View();
}
Я прочитал его в файле site.master:
<%
HttpCookie cookie = Request.Cookies["search"] ;
if ((cookie != null) && (cookie.Value != ""))
{
Response.Write(cookie.Values["dep_name"].ToString() + "---" +
cookie.Values["cat_name"].ToString() + "---" + cookie.Values["brand"].ToString());
}
%>
Проблема. Когда я нажимаю на другую страницу, где Request.QueryString["dep"]
равно null, куки файл, который я показываю, имеет значение null.
Как сохранить его в cookie без потери, пока мы еще не очистим файл cookie?
Ответы
Ответ 1
Я не уверен, что понимаю, что это вопрос о том, как правильно отправлять файлы cookie клиенту или какую-то ошибку с параметрами querystring. Поэтому я отправлю правильный способ отправки файлов cookie и не стесняюсь исправить меня, если я не понял.
В любом случае, я верю в это:
HttpCookie cookie = new HttpCookie("search");
будет reset поисковый файл
Чтобы получить файл cookie:
HttpCookie cookie = HttpContext.Request.Cookies.Get("some_cookie_name");
Чтобы проверить наличие файла cookie:
HttpContext.Request.Cookies["some_cookie_name"] != null
Чтобы сохранить файл cookie:
HttpCookie cookie = new HttpCookie("some_cookie_name");
HttpContext.Response.Cookies.Remove("some_cookie_name");
HttpContext.Response.SetCookie(cookie );
Ответ 2
Я организовал выборку и вставку cookie организованно таким образом, чтобы ее можно было использовать во всем приложении. для этого я поставлю два метода SetCookie
и GetCookie
.
Вы можете просто поместить этот класс в свой код и работать.
Здесь я помещаю свой класс со статическими методами
public class CookieStore
{
public static void SetCookie(string key, string value, TimeSpan expires)
{
HttpCookie encodedCookie = HttpSecureCookie.Encode(new HttpCookie(key, value));
if (HttpContext.Current.Request.Cookies[key] != null)
{
var cookieOld = HttpContext.Current.Request.Cookies[key];
cookieOld.Expires = DateTime.Now.Add(expires);
cookieOld.Value = encodedCookie.Value;
HttpContext.Current.Response.Cookies.Add(cookieOld);
}
else
{
encodedCookie.Expires = DateTime.Now.Add(expires);
HttpContext.Current.Response.Cookies.Add(encodedCookie);
}
}
public static string GetCookie(string key)
{
string value = string.Empty;
HttpCookie cookie = HttpContext.Current.Request.Cookies[key];
if (cookie != null)
{
// For security purpose, we need to encrypt the value.
HttpCookie decodedCookie = HttpSecureCookie.Decode(cookie);
value = decodedCookie.Value;
}
return value;
}
}
используя их, вы можете легко сохранять значения в файле cookie и при выборе значения
используя эти методы, так же просто, как
Для настройки Cookie:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
Для получения файлов cookie:
string currency= CookieStore.GetCookie("currency");