Использование cookie в asp.net mvc c # - PullRequest
30 голосов
/ 06 февраля 2012

Я хочу зарегистрировать параметр нескольких страниц на моем веб-сайте, используя 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"]является нулем, cookie, который я отображаю, является нулевым.

Как сохранить его в cookie, не теряя, пока мы еще не удалили cookie?

Ответы [ 2 ]

62 голосов
/ 09 февраля 2012

Я не уверен, что понимаю, является ли это вопросом о том, как правильно отправлять куки клиенту, или какой-то ошибкой с параметрами строки запроса. Поэтому я опубликую правильный способ отправки куки и не стесняйтесь поправлять меня, если я неправильно понял.

В любом случае, я верю этому:

HttpCookie cookie = new HttpCookie("search");

сбросит поисковый файл cookie

Чтобы получить печенье:

HttpCookie cookie = HttpContext.Request.Cookies.Get("some_cookie_name");

Чтобы проверить наличие куки:

HttpContext.Request.Cookies["some_cookie_name"] != null

Чтобы сохранить печенье:

HttpCookie cookie = new HttpCookie("some_cookie_name");
HttpContext.Response.Cookies.Remove("some_cookie_name");
HttpContext.Response.SetCookie(cookie );
18 голосов
/ 31 января 2014

Я организовал выборку и вставку файлов 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...