当我们在另一个域的页面上嵌入我们的应用程序(net core 6.0, React JS的单页应用程序)的iframe时,对会话变量的请求总是空的。
如果页面嵌入在同一域(我们的网站)的页面上,这种机制可以正常工作,但是当应用程序从另一个域的iframe调用时,会话总是空的。
我们尝试了下面的解决方案。它不工作。
请查看下面的代码细节。
在我们的项目中有以下代码:
在Program.cs
build.Services.AddSession(o =>
{
o.IdleTimeout = TimeSpan.FromHours(24);
o.Cookie.HttpOnly = true;
o.Cookie.IsEssential = true;
o.Cookie.SameSite = SameSiteMode.None;
o.IOTimeout = TimeSpan.FromHours(24);
});
build.Services.AddCookiePolicy(o => {
o.MinimumSameSitePolicy = SameSiteMode.None;
o.Secure = CookieSecurePolicy.Always;
o.CheckConsentNeeded = HttpContext => false;
});
build.Services.ConfigureApplicationCookie(o =>
{
o.Cookie.HttpOnly = true;
o.Cookie.IsEssential = true;
o.Cookie.SameSite = SameSiteMode.None;
o.Cookie.Expiration = TimeSpan.FromHours(24);
});
build.Services.AddDistributedMemoryCache();
build.Services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromMinutes(720));
var app = build.Build();
app.UseCookiePolicy();
app.UseSession();
我们像下面这样存储会话
HttpContext.Session.SetString("Something", "Something");
但是当我们尝试获取会话值always时,它返回null。因为前一个会话id改变了。
var some = HttpContext.Session.GetString("Something");
我需要维护以前的会话cookie。
提前感谢。
我也有同样的问题,只是这个代码在Program.cs为我工作。
builder.Services.AddSession(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.IsEssential = true;
});