Cookieを使用して、Webサイトのいくつかのページのパラメーターを登録します。私は以下のコードを試しましたが、私が欲しいものが好きではありません:
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でそれを読みます:
<%
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());
}
%>
問題:Request.QueryString["dep"]
はnullで、表示するcookieはnullです。
Cookieをまだクリアしていない間に、失わずにCookieに保存する方法は?
これがクライアントにCookieを適切に送信する方法に関する質問なのか、クエリ文字列パラメーターのバグなのかがわからない。したがって、クッキーを送信する適切な方法を投稿し、誤解した場合は気軽に修正してください。
いずれにせよ、私はこれを信じています:
HttpCookie cookie = new HttpCookie("search");
検索Cookieをリセットします
クッキーを取得するには:
HttpCookie cookie = HttpContext.Request.Cookies.Get("some_cookie_name");
Cookieの存在を確認するには:
HttpContext.Request.Cookies["some_cookie_name"] != null
Cookieを保存するには:
HttpCookie cookie = new HttpCookie("some_cookie_name");
HttpContext.Response.Cookies.Remove("some_cookie_name");
HttpContext.Response.SetCookie(cookie );
cookieの取得と挿入は、アプリケーション全体で使用できるように整理されています。そのために、2つのメソッドSetCookie
とGetCookie
を配置します。
このクラスをコードに追加するだけで解決できます。
ここに静的メソッドを使用してクラスを配置します
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;
}
}
これらを使用すると、Cookieに値を簡単に保存し、必要なときにいつでも値を取得できます。
これらの方法の使用は次のように簡単です
Cookieの設定:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
Cookieを取得する場合:
string currency= CookieStore.GetCookie("currency");