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

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

Вот мой код:

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
41
0
28 533
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Для 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;
});

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

У меня работает в веб-приложении asp.net Core 2.1 mvc! Большое спасибо

PatsonLeaner 15.05.2019 13:59

Это сработало для меня. Спасибо. Некоторые другие предлагали добавить services.AddMemoryCache () в ConfigureServices и app.UseCookiePolicy () в Configure, но в этом не было необходимости.

MikeDev 04.06.2019 15:25

Но не означает ли это, что CheckConsentNeeded по умолчанию является ложным? docs.microsoft.com/en-us/dotnet/api/…

user8128167 12.06.2019 17:10

Поскольку значение по умолчанию для логического свойства - false, но во время создания шаблона проекта значение по умолчанию устанавливается на true.

TanvirArjel 12.06.2019 17:48

Не работает для меня. Что еще я могу сделать?

Love Pandey 26.07.2019 18:38

Пожалуйста, проверьте свои стартовые настройки!

TanvirArjel 26.07.2019 18:40

у меня не сработало, чтобы после пары перенаправлений сеанс завершился, и мне нужно снова войти в систему.

Leon Barkan 05.11.2019 13:50

это происходит только тогда, когда я использую iis в качестве хоста в моем iis express (с vs2017), сеанс работает нормально

Leon Barkan 05.11.2019 13:52

Этот ответ и app.UseSession(); помогли мне провести сеанс, спасибо.

vandsh 26.03.2020 20:42

Я думаю, что также должна присутствовать опция IsEssential cookie: services.AddSession (options => {options.Cookie.IsEssential = true;});

JMGH 21.08.2020 00:39

Это плохой подход. Это сделает ваш веб-сайт / приложение несовместимым с GDPR. Проверьте ответ Макса Фавилли. Это решит вашу проблему и по-прежнему будет запрашивать согласие пользователя.

Sal Alturaigi 05.01.2021 12:29

Вы также можете просто установить 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);
}

Я теряю значение между контроллерами, если это произойдет с указанным выше?

rogue39nin 14.07.2020 00:00

У меня была такая же проблема, и я попробовал следующее отдельно, и я обнаружил, что любой из них работает для меня!

 1. options.CheckConsentNeeded = context => false;
 2. opts.Cookie.IsEssential = true; // make the session cookie Essential

Однако, хотя я не совсем уверен, я думаю, что №1 потенциально может привести к нарушению GDPR. Следовательно, я бы предпочел №2.

Другие вопросы по теме