web-dev-qa-db-fra.com

Utilisation de cookie dans asp.net mvc c #

Je souhaite enregistrer le paramètre de quelques pages de mon site Web à l'aide de cookies. J'ai essayé le code ci-dessous mais je n'aime pas ce que je veux:

 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();
 }

Je l'ai lu sur 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());
}
%>

Problème: lorsque je clique sur une autre page qui Request.QueryString["dep"] est nul, le cookie que j'affiche est nul.

Comment le stocker dans le cookie sans perdre alors que nous n'avons pas encore effacé le cookie?

30
titi

Je ne suis pas sûr de comprendre s'il s'agit d'une question sur la façon d'envoyer correctement les cookies au client ou d'un bug avec vos paramètres de chaîne de requête. Je vais donc poster la bonne façon d'envoyer des cookies et n'hésitez pas à me corriger si j'ai mal compris.

Quoi qu'il en soit, je crois que ceci:

HttpCookie cookie = new HttpCookie("search");

va réinitialiser le cookie de recherche

Pour obtenir un cookie:

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

Pour vérifier l'existence d'un cookie:

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

Pour enregistrer un cookie:

HttpCookie cookie = new HttpCookie("some_cookie_name");
HttpContext.Response.Cookies.Remove("some_cookie_name");
HttpContext.Response.SetCookie(cookie );
62
Yannis

j'ai organisé la récupération et l'insertion des cookies de manière organisée de manière à ce qu'ils puissent être utilisés tout au long de l'application. à cet effet, j'ai mis deux méthodes SetCookie et GetCookie.

Vous pouvez simplement mettre cette classe dans votre code et vous entraîner.

Ici, je mets ma classe avec les méthodes statiques

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;
    }

}

en les utilisant, vous pouvez facilement stocker des valeurs dans les cookies et récupérer la valeur chaque fois que nécessaire

en utilisant ces méthodes est aussi simple que

Pour définir le cookie:

CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live

Pour obtenir des cookies:

string currency= CookieStore.GetCookie("currency");
18
Shiva Saurabh