Я устанавливаю переменную сеанса в одном методе и пытаюсь получить значение переменной сеанса из другого метода в контроллере, но всегда получаю значение 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?}");
});
Очень странная и своеобразная проблема! Любая помощь будет принята с благодарностью!
В методе 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;
});
Задача решена!
Это сработало для меня. Спасибо. Некоторые другие предлагали добавить services.AddMemoryCache () в ConfigureServices и app.UseCookiePolicy () в Configure, но в этом не было необходимости.
Но не означает ли это, что CheckConsentNeeded по умолчанию является ложным? docs.microsoft.com/en-us/dotnet/api/…
Поскольку значение по умолчанию для логического свойства - false, но во время создания шаблона проекта значение по умолчанию устанавливается на true.
Не работает для меня. Что еще я могу сделать?
Пожалуйста, проверьте свои стартовые настройки!
у меня не сработало, чтобы после пары перенаправлений сеанс завершился, и мне нужно снова войти в систему.
это происходит только тогда, когда я использую iis в качестве хоста в моем iis express (с vs2017), сеанс работает нормально
Этот ответ и app.UseSession();
помогли мне провести сеанс, спасибо.
Я думаю, что также должна присутствовать опция IsEssential cookie: services.AddSession (options => {options.Cookie.IsEssential = true;});
Это плохой подход. Это сделает ваш веб-сайт / приложение несовместимым с GDPR. Проверьте ответ Макса Фавилли. Это решит вашу проблему и по-прежнему будет запрашивать согласие пользователя.
Вы также можете просто установить 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);
}
Я теряю значение между контроллерами, если это произойдет с указанным выше?
У меня была такая же проблема, и я попробовал следующее отдельно, и я обнаружил, что любой из них работает для меня!
1. options.CheckConsentNeeded = context => false;
2. opts.Cookie.IsEssential = true; // make the session cookie Essential
Однако, хотя я не совсем уверен, я думаю, что №1 потенциально может привести к нарушению GDPR. Следовательно, я бы предпочел №2.
У меня работает в веб-приложении asp.net Core 2.1 mvc! Большое спасибо