Reputation: 1035
I want to register the parameter of a few pages in my web site using cookie. I tried the below code but not like what I want :
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();
}
I read it in 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());
}
%>
Problem: When I click to another page that Request.QueryString["dep"]
is null, the cookie that I display is null to.
How to store it in the cookie without losing while we not yet clear the cookie?
Upvotes: 34
Views: 91471
Reputation: 1289
i have organised the cookie fetching and inserting in an organized manner such that it can be used throughout the application. for that purpose i put two methods SetCookie
and GetCookie
.
You can simply put this class in your code and work out.
Here i put my class with the static methods
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;
}
}
using these you can easily store values in cookie and fetch value whenever required
using these methods is as simple as
For Setting Cookie:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
For Getting Cookie:
string currency= CookieStore.GetCookie("currency");
Upvotes: 18
Reputation: 6157
I m not sure I understand if this is a question about how to properly send cookies to the client or some bug with your querystring params. So I ll post the proper way of sending cookies and feel free to correct me if I misunderstood.
In any case though, I believe this:
HttpCookie cookie = new HttpCookie("search");
will reset the search cookie
To get a cookie:
HttpCookie cookie = HttpContext.Request.Cookies.Get("some_cookie_name");
To check for a cookie's existence:
HttpContext.Request.Cookies["some_cookie_name"] != null
To save a cookie:
HttpCookie cookie = new HttpCookie("some_cookie_name");
HttpContext.Response.Cookies.Remove("some_cookie_name");
HttpContext.Response.SetCookie(cookie );
Upvotes: 74