Check if Cookie Exists

后端 未结 7 478
失恋的感觉
失恋的感觉 2020-12-03 02:21

From a quick search on Stack Overflow I saw people suggesting the following way of checking if a cookie exists:

HttpContext.Current.Response.Cookies         


        
相关标签:
7条回答
  • 2020-12-03 02:54

    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
    }
    
    0 讨论(0)
  • 2020-12-03 02:55

    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.

    0 讨论(0)
  • 2020-12-03 02:58

    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;
    
    0 讨论(0)
  • 2020-12-03 03:02

    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)

    0 讨论(0)
  • 2020-12-03 03:02

    You can do something like this to find out the cookies's value:

    Request.Cookies[SESSION_COOKIE_NAME].Value
    
    0 讨论(0)
  • 2020-12-03 03:04

    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:

    • This collection contains cookies received from the client
    • This collection is read-only
    • If you attempt to access a non-existent cookie from this collection, you will receive a null value.

    Response.Cookies:

    • This collection contains only cookies that have been added by the server during the current request.
    • This collection is writeable
    • If you attempt to access a non-existent cookie from this collection, you will receive a new cookie object; If the cookie that you attempted to access DOES NOT exist in the 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.

    0 讨论(0)
提交回复
热议问题