web-dev-qa-db-ja.com

ASP MVC Cookieが持続しない

私はASP MVCアプリで、Cookieを保存および取得するための見かけ上単純なコードをいくつか持っていますが、何らかの理由で永続化しません。コントローラーのコードは次のとおりです。

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

そして再びロードするには:

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

何らかの理由でCookieは常にnullですか?

54
Craig

問題は次のコードにあります。

if (System.Web.HttpContext.Current.Response.Cookies["CountryPreference"] == null)

RequestではなくResponseオブジェクトを使用してCookieの存在を確認しようとすると、ASP.netは自動的にCookieを作成します。

この詳細な投稿をここで確認してください: http://chwe.at/blog/post/2009/01/26/Done28099t-use-ResponseCookiesstring-to-check-if-a-cookie-exists!.aspx =


リンクが再びダウンした場合の記事からの引用....

ストーリー全体を読みたくない場合の簡単な説明

「if(Response.Cookies [“ mycookie”]!= null){…}」のようなコードを使用すると、ASP.Netは自動的に「mycookie」という名前の新しいCookieをバックグラウンドで生成し、古いCookieを上書きします。 Cookieを読み取るには、常にRequest.Cookies-Collectionを使用してください。

[ 記事の詳細 ]

94

再開時には、「Response "を使用してCookieを読み取らないでください。" Request "を使用してください。

2
Fernando JS