webentwicklung-frage-antwort-db.com.de

Der Wert der Sitzungsvariablen wird in ASP.NET Core auf Null gesetzt

Ich setze eine Sitzungsvariable in einer Methode und versuche, den Sitzungsvariablenwert von einer anderen Methode in einem Controller abzurufen, aber es wird immer null:

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

Hier ist meine Sitzungskonfiguration in der Klasse Startup:

In ConfigureServices() method:

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

In Configure() method:

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

Sehr seltsames und eigenartiges Problem! Jede Hilfe wird sehr geschätzt!

27
TanvirArjel

Für ASP.NET Core 2.1 und 2.2

In der ConfigureServices -Methode der Startup-Klasse Set options.CheckConsentNeeded = context => false; wie folgt:

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

Problem gelöst!

70
TanvirArjel

Sie können auch einfach Cookie.IsEssential = true Wie hier erklärt einstellen: https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/

Es gibt eine Überladung von services.AddSession(), mit der Sie SessionOptions in Ihrer Startup -Datei konfigurieren können. Sie können verschiedene Einstellungen wie das Sitzungszeitlimit ändern und das Sitzungscookie anpassen. Um das Cookie als wesentlich zu kennzeichnen, setzen Sie IsEssential auf 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