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?
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 );
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");