检查cookie存在(Check if Cookie Exists)

2019-07-02 13:39发布

堆栈溢出快速搜索我看到有人建议检查是否一个cookie存在的方式如下:

HttpContext.Current.Response.Cookies["cookie_name"] != null

或(内部的Page类):

this.Response.Cookies["cookie_name"] != null

然而,当我尝试使用索引(或Cookies.Get方法)来检索一个cookie不存在,似乎实际创建具有该名称的“默认”的cookie,并返回,我用这样无论什么cookie名它永远不会返回null。 (甚至更糟 - 产生不必要的cookie)

我在这里做得不对,或者是有某个名字的饼干是否存在等简单检查以不同的方式?

Answer 1:

Response.Cookies包含将被发送回浏览器的cookie。 如果你想知道一个Cookie是否存在,你应该看看Request.Cookies

总之,看有没有cookie存在,你可以检查Cookies.Get(string)但是,如果你使用Response对象对这个方法和cookie 存在,那么该cookie将被创建。

请参阅MSDN参考HttpCookieCollection.Get方法(String)



Answer 2:

有时你还需要知道,如果Cookie的响应存在。 然后,你可以检查的cookie项是否存在:

HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie")

更多信息可以发现在这里 。

在我来说,我不得不修改响应的Cookie在Global.asax中Application_EndRequest方法。 如果cookie不存在,我不碰它:

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
}


Answer 3:

您需要使用HttpContext.Current.Request.Cookies ,不Response.Cookies

附注:cookie被复制到更多关于Response.Cookies.Add ,这使得检查它们中的表现同样为新增加的饼干。 但是,进入饼干永远不会体现在Response

这种行为被记录在HttpResponse.Cookies属性:

通过使用HttpResponse.Cookies集合添加一个cookie,该cookie是HttpRequest.Cookies收集立即可用,即使响应尚未被发送到客户端。



Answer 4:

有很多这里取决于你试图完成什么正确答案的; 这里是我在为企业提供全面的答案尝试:

无论是RequestResponse对象包含Cookies性能,这是HttpCookieCollection对象。

Request.Cookies:

  • 该集合包含从客户端接收的cookie
  • 此集合为只读
  • 如果试图从这个集合来访问一个不存在的cookie,您将收到一个null值。

Response.Cookies:

  • 该集合只包含了服务器的当前请求过程中加入饼干。
  • 这个系列是可写的
  • 如果试图从这个集合来访问一个不存在的cookie,您将收到一个新的Cookie对象; 如果您尝试访问该cookie 不会在存在Request.Cookies集合,它会被添加(但如果Request.Cookies对象已包含具有相同关键字的cookie,即使它的值是陈旧的,它不会进行更新,以反映在新创建的cookie的变化Response.Cookies集合。

解决方案


如果要检查来自客户端一个cookie的存在,执行下列操作之一

  • Request.Cookies["COOKIE_KEY"] != null
  • Request.Cookies.Get("COOKIE_KEY") != null
  • Request.Cookies.AllKeys.Contains("COOKIE_KEY")

如果你想检查已经通过服务器的当前请求的过程中加入一个cookie的存在,执行以下操作:

  • Response.Cookies.AllKeys.Contains("COOKIE_KEY")见这里 )

尝试检查已经由服务器通过这些方法中的一种当前请求中加入一个cookie ...

  • Response.Cookies["COOKIE_KEY"] != null
  • Response.Cookies.Get("COOKIE_KEY") != null (见这里 )

...会导致创建的cookie中的Response.Cookies集合,国家将评估为true



Answer 5:

public static class CookieHelper
{
    /// <summary>
    /// Checks whether a cookie exists.
    /// </summary>
    /// <param name="cookieCollection">A CookieCollection, such as Response.Cookies.</param>
    /// <param name="name">The cookie name to delete.</param>
    /// <returns>A bool indicating whether a cookie exists.</returns>
    public static bool Exists(this HttpCookieCollection cookieCollection, string name)
    {
        if (cookieCollection == null)
        {
            throw new ArgumentNullException("cookieCollection");
        }

        return cookieCollection[name] != null;
    }
}

用法:

Request.Cookies.Exists("MyCookie")


Answer 6:

对不起,没有足够的代表,以添加评论,但是从zmbq的回答:

总之,看有没有cookie存在,你可以检查Cookies.Get(串),这将不会修改Cookie集合。

也许是不完全正确,因为Cookies.Get(字符串)实际上将创建一个cookie使用该名称,如果它不存在。 然而,正如他所说的,你不需要这么看着Request.Cookies时,不Response.Cookies,是这样的:

bool cookieExists = HttpContext.Current.Request.Cookies["cookie_name"] != null;


Answer 7:

你可以做这样的事情,找出饼干的价值:

Request.Cookies[SESSION_COOKIE_NAME].Value


文章来源: Check if Cookie Exists