gpt4 book ai didi

c# - 如何使用C#在webapi中读取同名的多个cookie

转载 作者:行者123 更新时间:2023-11-30 21:39:01 28 4
gpt4 key购买 nike

我们创建了两个同名的 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);
}
}
};

最佳答案

当 cookie 已经存在并且您更新它(通过响应的 Cookies 集合)时,无论是通过添加还是更新它,都会将第二个“重复”cookie 添加到请求的 Cookies 集合中。这个重复的实际上是您刚刚更新的那个。

虽然我没有在 MSDN 文档中检查这一点,但我相信这很可能是设计使然。你为什么问?因为它允许您获取您当前版本的 cookie(您刚刚通过响应更新/添加的那个),或者用户浏览器实际发送的那个(因此是他们当前版本的 cookie此时此刻)。

现在,使用 Cookies.Get(name)、Cookies[name] 或 - 您正在做的方式 - 遍历 key 集合(从头开始)然后返回第一个匹配项,将始终导致第一个cookie 被退回。这是用户仍然知道的 cookie,因此不是您在此请求期间更新的 cookie。

如果您想检索“您的”当前版本的 cookie,您必须获取具有该名称的最后一个,而不是第一个。您可以这样做:

int index = Array.LastIndexOf(this.HttpRequest.Cookies.AllKeys, cookieKey);

if (index != -1)
{
result = this.HttpRequest.Cookies[index];
}

当然,如果您没有在当前请求中更新它,这也会始终返回正确的 cookie。

关于c# - 如何使用C#在webapi中读取同名的多个cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com