From a quick search on Stack Overflow I saw people suggesting the following way of checking if a cookie exists:
HttpContext.Current.Response.Cookies
Sometimes you still need to know if Cookie exists in Response. Then you can check if cookie key exists:
HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie")
More info can be found here.
In my case I had to modify Response Cookie in Application_EndRequest method in Global.asax. If Cookie doesn't exist I don't touch it:
string name = "myCookie";
HttpContext context = ((HttpApplication)sender).Context;
HttpCookie cookie = null;
if (context.Response.Cookies.AllKeys.Contains(name))
{
cookie = context.Response.Cookies[name];
}
if (cookie != null)
{
// update response cookie
}
You need to use HttpContext.Current.Request.Cookies
, not Response.Cookies
.
Side note: cookies are copied to Request on Response.Cookies.Add
, which makes check on either of them to behave the same for newly added cookies. But incoming cookies are never reflected in Response
.
This behavior is documented in HttpResponse.Cookies property:
After you add a cookie by using the HttpResponse.Cookies collection, the cookie is immediately available in the HttpRequest.Cookies collection, even if the response has not been sent to the client.
Sorry, not enough rep to add a comment, but from zmbq's answer:
Anyway, to see if a cookie exists, you can check Cookies.Get(string), this will not modify the cookie collection.
is maybe not fully correct, as Cookies.Get(string) will actually create a cookie with that name, if it does not already exist. However, as he said, you need to be looking at Request.Cookies, not Response.Cookies So, something like:
bool cookieExists = HttpContext.Current.Request.Cookies["cookie_name"] != null;
Response.Cookies
contains the cookies that will be sent back to the browser. If you want to know whether a cookie exists, you should probably look into Request.Cookies
.
Anyway, to see if a cookie exists, you can check Cookies.Get(string). However, if you use this method on the Response object and the cookie doesn't exist, then that cookie will be created.
See MSDN Reference for HttpCookieCollection.Get Method (String)
You can do something like this to find out the cookies's value:
Request.Cookies[SESSION_COOKIE_NAME].Value
There are a lot of right answers here depending on what you are trying to accomplish; here's my attempt at providing a comprehensive answer:
Both the Request
and Response
objects contain Cookies
properties, which are HttpCookieCollection
objects.
Request.Cookies:
null
value.Response.Cookies:
Request.Cookies
collection, it will be added (but if the Request.Cookies
object already contains a cookie with the same key, and even if it's value is stale, it will not be updated to reflect the changes from the newly-created cookie in the Response.Cookies
collection.Solutions
If you want to check for the existence of a cookie from the client, do one of the following
Request.Cookies["COOKIE_KEY"] != null
Request.Cookies.Get("COOKIE_KEY") != null
Request.Cookies.AllKeys.Contains("COOKIE_KEY")
If you want to check for the existence of a cookie that has been added by the server during the current request, do the following:
Response.Cookies.AllKeys.Contains("COOKIE_KEY")
(see here)Attempting to check for a cookie that has been added by the server during the current request by one of these methods...
Response.Cookies["COOKIE_KEY"] != null
Response.Cookies.Get("COOKIE_KEY") != null
(see here)...will result in the creation of a cookie in the Response.Cookies
collection and the state will evaluate to true
.