【问题标题】:.Net Core cookie will not be set.Net Core cookie 不会被设置
【发布时间】:2019-02-26 14:39:47
【问题描述】:

在 .Net Core MVC 项目中:我试图在我的控制器操作中以最简单的方式设置一个简单的 cookie,但无法使其持久化并显示在浏览器中。

我的代码:

public IActionResult IndexPost()
{
    var option = new CookieOptions();
    option.Expires = DateTime.Now.AddMinutes(60);
    Response.Cookies.Append(cookieName, "SomeCookieValue", option);
    return View();
}

但在浏览器(Chrome)中我看不到它,甚至看不到它:

var cookieValue = Request.Cookies[cookieName];

(cookieName 是一个带有 cookie 名称的变量集)

如果使用 Chrome 扩展程序“EditThisCookie”,我可以手动设置它以确保 Request.Cookies[cookieName] 确实有效,因此错误出现在我的代码的 Append-cookie 中。

【问题讨论】:

  • 您是否在开发者选项中检查了 Chrome 的网络选项卡?您应该会看到 IndexPost 请求在那里设置了 cookie 标头。
  • 我看到了请求,但没有,cookie 不包括在那里......奇怪。所以不知何故我的代码 Response.Cookies.Append(cookieName, "SomeCookieValue", option) 对响应没有影响?!

标签: c# cookies asp.net-core-mvc


【解决方案1】:

从 ASP.NET Core 2.1 开始,模板在 Startup.cs 中包含您的CookiePolicyOptions 的 GDPR 兼容配置,即:

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;
});

true 的 CheckConsentNeeded 选项将阻止任何非必要的 cookie 在未经用户明确许可的情况下发送到浏览器(无 Set-Cookie 标头)。

您可以更改此行为,或通过在创建时将IsEssential 属性设置为true 将您的cookie 标记为必需:

var options = new CookieOptions
{
    Expires = DateTime.Now.AddMinutes(60),
    IsEssential = true
};

Response.Cookies.Append("rudeCookie", "I don't need no user to tell me it's ok.", options);

在此处阅读更多信息:https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.1

【讨论】:

  • 好的,谢谢!那行得通!奇怪的是,我在寻找答案的任何地方都没有看到这个。
  • 很抱歉,如果您有连接 HTTPS,那就可以了。在我的测试中,这是正确的方法。
  • 完美,这就是我所缺少的。
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 2020-07-01
  • 2019-10-21
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 2011-01-30
  • 2011-07-25
相关资源
最近更新 更多