ASP.NET从具有多个键的cookie中检索单个值

ASP.NET从具有多个键的cookie中检索单个值,asp.net,cookies,Asp.net,Cookies,我在一个类中创建了一个函数,供我的所有内容页使用,用于从具有多个键的cookie中检索单个值。问题是,函数每次都返回null,即使我可以在浏览器中看到cookie 这是我的类文件中的函数 public string getCookie(string name, string name2) { string cookie = null; if (HttpContext.Current.Request.Browser.Cookies) { HttpCookie

我在一个类中创建了一个函数,供我的所有内容页使用,用于从具有多个键的cookie中检索单个值。问题是,函数每次都返回null,即使我可以在浏览器中看到cookie

这是我的类文件中的函数

public string getCookie(string name, string name2)
{
    string cookie = null;
    if (HttpContext.Current.Request.Browser.Cookies)
    {
        HttpCookie request = HttpContext.Current.Request.Cookies[name];
        if(request != null)
        {
            if (request.HasKeys)
            {
                if (name2 != null)
                    cookie = request.Values[name2];
            }
            else
                cookie = request.Value;
        }
    }
    return cookie;
}
name
是cookie的名称

name2
是具有我试图获取的值的键的名称

编辑:我使用断点检查了进程。在那之前一切都很好
cookie=request.Values[name2]返回null

EDIT2:当一页上按下按钮时,我正在添加cookie。设置cookie后,该按钮会将您重定向到另一个页面,该页面会检查页面加载是否添加了cookie

EDIT3:过程如下:

Page1.aspx>>按按钮>>按钮添加cookie>>添加cookie后重定向到Page2.aspx

Page2.aspx>>检查页面上是否存在cookie\u Load>!>
getCookie
查找cookie,但它在
请求中返回null。值[name2]

EDIT4:好的,我通过循环cookie的所有键,然后将每个键名与参数
name2
进行比较,解决了这个问题。但是,有没有一种方法可以不循环地获取单个键的值

public string getCookieRequest(string name, string name2)
{
    String cookie = null;
    if (HttpContext.Current.Request.Browser.Cookies)
    {
        HttpCookie request = HttpContext.Current.Request.Cookies[name];
        if(request != null)
        {
            if (request.HasKeys)
            {
                if (name2!= null)
                {
                    //cookie = request.Values[name2];
                    int i = 0;
                    foreach (string key in request.Values.AllKeys)
                    {
                        if (request[key] == name2)
                            return request.Values.AllKeys[i];
                        i++;
                    }
                }
            }
            else
                cookie = request.Value;
        }
    }
    return cookie;
}
试试这个

HttpCookie ck = Request.Cookies["your cookie name"];
    if (ck != null )
    {
         string cookie = ck.Values["your key name"];
    }

ck将存储cookie信息,如果它不为null,则将键值存储在字符串中。您可以通过更改密钥名称来访问任何密钥值

好的,这对我很有用。它用于获取具有单个或多个键的cookie的单个值。虽然我不喜欢遍历所有的键来找到我要寻找的值,但我想这是必要的:

public string getCookie(string name, string name2 = null)
{
    string cookie = null;
    if (HttpContext.Current.Request.Browser.Cookies)
    {
        HttpCookie request = HttpContext.Current.Request.Cookies[name];
        if(request != null)
        {
            if (request.HasKeys)
            {
                if (name2!= null)
                {
                    foreach (string value in request.Values.AllKeys)
                        if (request[value] == name2)
                        {
                            cookie = value;
                            break;
                        }
                }
            }
            else
                cookie = request.Value;
        }
    }
    return cookie;
}

嗯……如果你看我的代码,我就是这么做的。相同的结果。如果你的密钥名或cookie名错误,或者你的cookie为空,因为它对meth非常有效。名称写得很好,我甚至将名称(“\u s”)和密钥名(“\u s\u tc”)复制到函数参数中,它仍然给我空值。此外,它实际上是在检测cookie,因为它在
request.HasKeys
中返回true。但是它在
cookie=request.Values[name2]
中给我空值。如果(name2!=null)
,你在这里得到name2值吗?如果我要将name2作为函数的参数发送,为什么我要检查它是否为null。请使用断点调试该页并确保cookie不是null我已经这样做了。正如我在帖子中所说的,在
cookie=request.Values[name2]。cookie不是空的。