Значение переменной сеанса становится нулевым в ASP.NET Core

Я устанавливаю переменную сеанса в одном методе и пытаюсь получить значение переменной сеанса из другого метода в контроллере, но он всегда становится нулевым:

Вот мой код:

public class HomeController : Controller
{
    public IActionResult Index()
    { 
        HttpContext.Session.SetString("Test", "Hello!");
        var message = HttpContext.Session.GetString("Test");// Here value is getting correctly
        return View();
    }

    public IActionResult About()
    {
        var message = HttpContext.Session.GetString("Test"); // This value is always getting null here

        return View();
    }
}

Вот моя конфигурация сеанса в классе Startup :

В методе ConfigureServices():

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.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDistributedMemoryCache();
services.AddMvc().AddSessionStateTempDataProvider();
services.AddSession(options =>
{
    options.Cookie.Name = "TanvirArjel.Session";
    options.IdleTimeout = TimeSpan.FromDays(1);
});

В методе Configure():

app.UseSession();
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Очень странная и своеобразная проблема! Любая помощь будет высоко оценена!

Ответы

Ответ 1

Для ASP.NET Core 2.1 и 2.2

В методе ConfigureServices класса Startup задайте options.CheckConsentNeeded = context => false; следующее:

services.Configure<CookiePolicyOptions>(options =>
{
  // This lambda determines whether user consent for non-essential cookies is needed for a given request.
  options.CheckConsentNeeded = context => false;
  options.MinimumSameSitePolicy = SameSiteMode.None;
});

Задача решена!

Ответ 2

Вы также можете просто установить Cookie.IsEssential = true, как описано здесь: https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/

Существует перегрузка services.AddSession(), которая позволяет вам настроить SessionOptions в вашем файле Startup. Вы можете изменить различные параметры, такие как время ожидания сеанса, а также настроить cookie файл сеанса. Чтобы пометить файл cookie как необходимый, установите для параметра IsEssential значение true:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true; // consent required
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddSession(opts => 
    {
        opts.Cookie.IsEssential = true; // make the session cookie Essential
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Ответ 3

Спасибо, вышеприведенный ответ от tanvir сработал.