我在一个方法中设置会话变量并尝试从控制器中的另一个方法获取会话变量值,但它总是变为空:


这是我的代码:


 public class HomeController:Controller
 {
 public IActionResult Index()
 {
 HttpContext.Session.SetString(“Test”,“Hello!”);
 var message = HttpContext.Session.GetString(“Test”); //这里的值正确得到了#xA; return View();
 }

 public IActionResult关于()
 {
 var message = HttpContext.Session.GetString(“Test”); //此值始终为null

 return View();
 }
}



 以下是 Startup
类中的会话配置:
在 ConfigureServices()
方法中:
services.Configure< CookiePolicyOptions>(options =>
 {
 //此lambda确定对于给定请求是否需要用户同意非必要cookie。
 options .CheckConsentNeeded = context => true;
 options.MinimumSameSitePolicy = SameSiteMode.None;
});

 services.AddMvc()。SetCompatibilityVersion(CompatibilityVersion.Version_2_1);& #xA; 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?}”);
});&#xA ;


 非常奇怪和特殊的问题!任何帮助将受到高度赞赏!

答案 0 :(得分:60)
在Startup类的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;
});
问题解决了!
答案 1 :(得分:0)
您也可以按照此处的说明设置Cookie.IsEssential = true
:https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/
答案 2 :(得分:0)
我遇到了同样的问题,并尝试了以下方法,发现它们中的任何一个对我都有效!
1. options.CheckConsentNeeded = context => false;
2. opts.Cookie.IsEssential = true; // make the session cookie Essential
但是,尽管我不太确定,但我认为#1可能会导致违反GDPR。因此,我更喜欢#2。