ASP.NET从具有多个键的cookie中检索单个值
我在一个类中创建了一个函数,供我的所有内容页使用,用于从具有多个键的cookie中检索单个值。问题是,函数每次都返回null,即使我可以在浏览器中看到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
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不是空的。