2012-02-06 15 views
24

クッキーを使用して私のウェブサイトにいくつかのページのパラメータを登録したいと思います。私は以下のコードを試してみましたが、私が欲しいものを好きではない:asp.net mvcでクッキーを使用するC#

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

私はsite.masterでそれを読む:私はRequest.QueryString["dep"]がnullであることを別のページにクリックし、クッキーその:

<% 

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

問題私は表示するにnullです。

クッキーをまだクリアしていない間にクッキーに保存する方法を教えてください。

答えて

56

私はこれがクライアントにクッキーを正しく送信する方法、またはクエーストリングのパラメータでいくつかのバグを送信するかどうか不明です。だから、私が誤解した場合、私はクッキーを送信し、私を修正する自由を感じる適切な方法を投稿します。いずれの場合においても

しかし、私はこれを信じる:

HttpCookie cookie = new HttpCookie("search"); 

はクッキーを取得するには、検索クッキー

をリセットします:

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

クッキーの存在を確認するには:

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

クッキーを保存するには:

HttpCookie cookie = new HttpCookie("some_cookie_name"); 
HttpContext.Response.Cookies.Remove("some_cookie_name"); 
HttpContext.Response.SetCookie(cookie); 
+0

私は約6年間、ウェブのものをやってきたと私は最近、初めてCookieを設定関わるタスクを与えられました。奇妙な野生のもの。これは助けてくれてありがとう! – MrBoJangles

+4

明確にするために、このコードをMVCプロジェクトの中に入れてコントローラにゴミ箱がいっぱいになるのを避けてください。 –

+0

'HttpContext.Response.Cookies.Remove'行は保存していないクッキーを削除していませんか? – Jaylen

14

私はクッキーを取り出して、アプリケーション全体で使用できるように組織化された方法で組み立てています。その目的のために私は2つの方法を入れましたSetCookieGetCookie

あなたのコードにこのクラスを入れて、うまくいくことができます。

は、ここで私はあなたがクッキーの値を簡単に保存することができ、これらを使用して静的メソッド

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

} 

で私のクラスを入れて、これらのメソッドを使用して

を必要な時はいつでも値をフェッチ

のと同じくらい簡単ですクッキー設定の場合:

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

string currency= CookieStore.GetCookie("currency"); 
+0

保存するときに、新しいCookieを設定するのではなく、既存のCookieを更新するのはなぜですか? –

+1

有効期限がjan 1 0001のクイックウォッチ1で見たときにクッキーが2回見つかるという問題がありました。 –

+0

http://www.nuget.org/packages/httpsecurecookie/のHttpSecureCookieを使用していますか? –

関連する問題