.net core 3.1无法删除cookies

问题描述 投票:0回答:4

我有基于.net core3.1和iis服务器的Web应用程序。 由于某种原因,我无法在注销时删除 cookie。 我尝试了

Response.Cookies.Delete(cookie.Key);
Response.Cookies.Append(cookie.Key, "", options);
options.Expires = DateTime.Now.AddDays(-1)
options.MaxAge = new TimeSpan(0);
,但这仍然不起作用。

当我在本地主机上运行项目时,问题不会出现。

我在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();
c# asp.net-core iis session-cookies
4个回答
7
投票

尝试以下代码:

Response.Cookies.Delete("CookieName", new CookieOptions()
{
    Secure = true,
});

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

参考:如何在 Chrome 中正确删除 SameSite Cookie(80+)


5
投票

Response.Cookies.Delete 不起作用,除非您使用与创建期间相同的选项 (CookieOptions)。

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

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

4
投票

所以据我了解,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);
}

0
投票

@JayHandle 的 响应是最接近让它发挥作用的。创建了一个空 cookie,其中包含与要终止的 cookie 匹配的所有标志,并使其过期。 Cookies.Delete 阻止它为我工作:

context.Response.Cookies.Append("cookie-name", string.Empty, new CookieOptions
                    {
                        Path = context.Request.PathBase, // needed if running under virtual directory
                        Secure = true,
                        Expires = DateTimeOffset.UtcNow.AddDays(-2),
                        IsEssential = true,
                        SameSite = SameSiteMode.Lax // Match the same site settings of the cookie
                    });
© www.soinside.com 2019 - 2024. All rights reserved.