我在类中为我的所有内容页面创建了一个函数,用于从具有多个键的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]
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;
}
答案 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;
}