web-dev-qa-db-fra.com

ASP Les cookies MVC ne persistent pas

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?

54
Craig

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!

[ Plus de détails dans l'article ]

94
Nilesh Deshpande

En résumé, n'utilisez pas "Response" pour lire les cookies, utilisez "Request".

2
Fernando JS