web-dev-qa-db-fra.com

La valeur de la variable de session devient nulle dans ASP.NET Core

Je suis en train de définir une variable de session dans une méthode et d'essayer d'obtenir la valeur de la variable de session d'une autre méthode dans un contrôleur, mais sa valeur devient toujours nulle:

Voici mon code:

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

Voici ma configuration de session dans Startup class:

Dans la méthode 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);
});

Dans la méthode Configure():

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

Problème très étrange et particulier! Toute aide sera très appréciée!

27
TanvirArjel

Pour ASP.NET Core 2.1 et 2.2

Dans la méthode ConfigureServices de la classe de démarrage, Set options.CheckConsentNeeded = context => false; comme suit:

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

Problème résolu!

70
TanvirArjel

Vous pouvez également simplement définir Cookie.IsEssential = true Comme expliqué ici: https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/

Il y a une surcharge de services.AddSession() qui vous permet de configurer SessionOptions dans votre fichier Startup. Vous pouvez modifier divers paramètres tels que le délai d'expiration de la session. Vous pouvez également personnaliser le cookie de la session. Pour marquer le cookie comme essentiel, définissez IsEssential sur 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
Max Favilli