46 votes

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

Je suis en paramètre une variable de session dans une méthode, et d'essayer de sortir la variable de session de la valeur à partir d'une autre méthode dans un contrôleur, mais sa a toujours la valeur null:

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 en Startup classe:

En ConfigureServices() méthode:

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

En Configure() méthode:

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

Très étrange et particulier de problème! Toute aide sera très appréciée!

85voto

TanvirArjel Points 4560

Pour ASP.NET Core 2.1 et 2.2

Dans la méthode ConfigureServices de la classe de démarrage, définissez 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!

11voto

Max Favilli Points 635

Vous pouvez aussi régler Cookie.IsEssential = true comme expliqué ici: https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X