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

时间:2014-09-03 04:37:23

标签: asp.net cookies

我在类中为我的所有内容页面创建了一个函数,用于从具有多个键的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是具有I' m试图获取的值的密钥的名称

编辑:我使用断点检查了该过程。一切都很顺利,直到 cookie = request.Values[name2];返回null。

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

EDIT3:这个过程是这样的:

Page1.aspx>>按下按钮>>按钮添加了Cookie>>将cookie重定向添加到Page2.aspx

之后

Page2.aspx>>检查Page_Load>上是否存在Cookie!> getCookie找到了Cookie但它在request.Values[name2]

中返回null

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;
}

2 个答案:

答案 0 :(得分:1)

试试这个

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

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

答案 1 :(得分:1)

好的,这对我有用。它适用于使用单个或多个键获取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;
}