.net core 3.1 无法删除 cookie

Posted

技术标签:

【中文标题】.net core 3.1 无法删除 cookie【英文标题】:.net core 3.1 cannot delete cookies 【发布时间】:2020-05-22 04:42:11 【问题描述】:

我有基于 .net core3.1 和 iis 服务器的网络应用程序。 出于某种原因,我无法在注销时删除 cookie。 我试过Response.Cookies.Delete(cookie.Key);Response.Cookies.Append(cookie.Key, "", options); 使用options.Expires = DateTime.Now.AddDays(-1)options.MaxAge = new TimeSpan(0);,但这仍然不起作用。

当我在 localhost 上运行项目时没有出现问题。

我在 startup.cs 文件中的配置。

配置服务:

services.Configure<CookiePolicyOptions>(options =>

    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
    options.CheckConsentNeeded = context => true;
    options.MinimumSameSitePolicy = SameSiteMode.None;
);

services.AddSession(options =>

    options.IdleTimeout = TimeSpan.FromMinutes(15);
    options.Cookie.IsEssential = true;
    options.Cookie.Name = "b2bApp";
);
services.ConfigureApplicationCookie(options =>

    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
    options.Cookie.SameSite = SameSiteMode.Strict;
    options.Cookie.IsEssential = true;
    options.Cookie.Name = "b2bApp";
    options.ExpireTimeSpan = TimeSpan.FromMinutes(15);
    options.LoginPath = "/Identity/Account/Login";
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.SlidingExpiration = true;
);

配置:

app.UseCookiePolicy();
app.UseSession();

【问题讨论】:

您是否使用 IIS 作为反向代理来托管您的 ASP.NET Core 应用程序? 我只是在服务器上安装了 .net core 3.1,然后将 AspNetCoreModuleV2 添加到网站模块中。要发布,我首先创建了一个没有托管代码的应用程序池,然后从 VS 发布 在服务器上发布我的“asp.net core mvc”应用程序后,我遇到了同样的问题。调试时效果很好。 【参考方案1】:

试试下面的代码:

Response.Cookies.Delete("CookieName", new CookieOptions()

    Secure = true,
);

为了删除 SameSite=None cookie,过期日期已过的替换 cookie 也需要设置安全标志。如果不是这种情况,则不会删除 cookie(如:Chrome 不会接受替换 cookie)。

参考:How To Correctly Delete Your SameSite Cookies In Chrome (80+)

【讨论】:

【参考方案2】:

我知道已经晚了,但我遇到了同样的问题。

如果不提供与创建相同的选项,Response.Cookies.Delete 将不起作用。

例如,如果您使用此选项添加,则需要使用相同的选项删除,除了 Expires;

new Microsoft.AspNetCore.Http.CookieOptions()  Expires = DateTime.Now.AddHours(120), Path = "/", HttpOnly = true, Secure = this.Request.IsHttps, IsEssential = true 

【讨论】:

【参考方案3】:

据我了解,Response.Cookies.Delete("key") 仅设置要删除的 cookie 的过期日期,但实际上并没有删除它。所以这是我做的一种解决方法。我先把cookie里面的数据删掉,这样如果cookie被使用了,没关系,因为里面什么都没有,然后删掉。

public void RemoveCookie(string key)

    //Erase the data in the cookie
    CookieOptions option = new CookieOptions();
    option.Expires = DateTime.Now.AddDays(-1);
    option.Secure = true;
    option.IsEssential = true;
    Response.Cookies.Append(key, string.Empty, option);
    //Then delete the cookie
    Response.Cookies.Delete(key);

【讨论】:

以上是关于.net core 3.1 无法删除 cookie的主要内容,如果未能解决你的问题,请参考以下文章

Set-cookie 不适用于 Dot net Core 3.1 中的跨站点请求/响应和 React 设置同站点 cookie 和/或 CORS 问题

无法运行 dockerized .NET Core (3.1) API

无法在 .net core 3.1 中注入依赖项

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

从 .net core 2.2 移动到 3.1 后无法上传文件

。NET Core 3.1 gRPC Docker:无法使原型路径相对