Значение переменной сеанса становится нулевым в 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 сработал.