J'ai une ASP MVC App avec un code apparemment simple pour enregistrer et récupérer les cookies mais pour une raison quelconque, ils ne persisteront pas. Le code dans le contrôleur est:
if (System.Web.HttpContext.Current.Response.Cookies["CountryPreference"] == null)
{
HttpCookie cookie = new HttpCookie("CountryPreference");
cookie.Value = country;
cookie.Expires = DateTime.Now.AddYears(1);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
Et pour le recharger:
if (System.Web.HttpContext.Current.Request.Cookies["CountryPreference"] != null)
{
System.Web.HttpContext.Current.Request.Cookies["CountryPreference"].Expires = DateTime.Now.AddYears(1);
data.Country = System.Web.HttpContext.Current.Request.Cookies["CountryPreference"].Value;
}
Pour une raison quelconque, le cookie est toujours nul?
Le problème réside dans le code suivant:
if (System.Web.HttpContext.Current.Response.Cookies["CountryPreference"] == null)
Lorsque vous essayez de vérifier l'existence d'un cookie à l'aide de l'objet Réponse plutôt que de la demande, ASP.net crée automatiquement un cookie.
Consultez cet article détaillé ici: http://chwe.at/blog/post/2009/01/26/Done28099t-use-ResponseCookiesstring-to-check-if-a-cookie-exists!.aspx =
Citation de l'article au cas où le lien redescendrait ....
La courte explication, si vous n'aimez pas lire toute l'histoire
Si vous utilisez du code comme "if (Response.Cookies [" mycookie "]!! = Null) {…}", ASP.Net génère automatiquement un nouveau cookie avec le nom "mycookie" en arrière-plan et écrase votre ancien cookie! Utilisez toujours la collection Request.Cookies pour lire les cookies!
En résumé, n'utilisez pas "Response" pour lire les cookies, utilisez "Request".