В проекте .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]
действительно работает, поэтому ошибка каким-то образом находится в файле cookie Append моего кода.
Я вижу запрос, но нет, cookie туда не включен ... странно. Так почему-то мой код Response.Cookies.Append (cookieName, "SomeCookieValue", option) не влияет на ответ ?!
Начиная с 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;
});
Опция CheckConsentNeeded
в true
предотвратит отправку любых несущественных файлов cookie в браузер (без заголовка Set-Cookie) без явного разрешения пользователя.
Вы можете изменить это поведение или пометить свой файл cookie как важный, установив для свойства IsEssential
значение true
при его создании:
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, это нормально. в моем тесте я был правильным путем.
Отлично, это то, чего мне не хватало.
Вы проверили вкладку сети Chrome в параметрах разработчика? Вы должны увидеть, что запрос IndexPost устанавливает там заголовок cookie.