ASP.NET 核心中的会话变量值越来越空
Session variable value is getting null in 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
class 中的会话配置:
在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?}");
});
很奇葩的问题!任何帮助将不胜感激!
对于 ASP.NET 核心 2.1 和 2.2
在Startupclass的ConfigureServices
方法中,设置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;
});
问题已解决!
您也可以按照此处的说明设置 Cookie.IsEssential = true
:https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/
services.AddSession()
重载允许您在 Startup
文件中配置 SessionOptions
。您可以更改会话超时等各种设置,还可以自定义会话 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.
我在一个方法中设置会话变量,并试图从控制器中的另一个方法获取会话变量值,但它总是为空:
这是我的代码:
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
class 中的会话配置:
在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?}");
});
很奇葩的问题!任何帮助将不胜感激!
对于 ASP.NET 核心 2.1 和 2.2
在Startupclass的ConfigureServices
方法中,设置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;
});
问题已解决!
您也可以按照此处的说明设置 Cookie.IsEssential = true
:https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/
services.AddSession()
重载允许您在 Startup
文件中配置 SessionOptions
。您可以更改会话超时等各种设置,还可以自定义会话 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.