我们有两个使用相同名称创建的Cookie。 当我迭代循环时,我总是得到第一个cookie。 有没有办法单独访问两个cookie?
if (Request.Cookies.AllKeys.Where(x => x == "test").Count() > 1)
{
foreach (var cookie in Request.Cookies.AllKeys)
{
if (Request.Cookies[cookie].Name == "test")
{
var temp = System.Web.HttpContext.Current.Request.Cookies["test"];
temp.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(temp);
}
}
};
答案 0 :(得分:1)
当一个cookie已经存在,并且您通过添加或更新它(通过响应的Cookies集合)对其进行更新时,第二个“重复” cookie被添加到请求的Cookies集合中。这个重复的副本实际上就是您刚刚更新的副本。
尽管我没有在MSDN文档中进行检查,但我相信这很可能是设计使然。你为什么问?因为它允许您获取您的cookie的当前版本(您刚刚通过响应更新/添加的cookie),或由用户的浏览器实际发送的cookie(因此是其cookie的当前版本)。在这个时候)。
现在,使用Cookies.Get(name),Cookies [name]或您执行的方式-从头开始循环遍历键集合,然后返回第一个匹配项,将始终导致第一个匹配项cookiebeïng返回。这是用户仍然知道的cookie,因此不是您在此请求期间一直在更新的cookie。
如果要检索“当前”的cookie版本,则必须获取具有该名称的最后一个而不是第一个。您可以这样做:
int index = Array.LastIndexOf(this.HttpRequest.Cookies.AllKeys, cookieKey);
if (index != -1)
{
result = this.HttpRequest.Cookies[index];
}
当然,如果您未在当前请求中进行更新,它也将始终返回正确的cookie。
答案 1 :(得分:0)
我们不能在特定域中拥有两个具有相同名称的cookie,并且默认情况下我们从当前域获取Cookie。所以我没有看到一个案例,你可以在上面的代码中找到两个同名的cookie。
请详细说明您的问题。