ASP.如果使用iframe加载子网站并在子网站中设置会话,则会丢失父网站的会话



我有两个不同的网站。一个用作父网站,另一个用作父网站的子网站,并将其加载到父网站的iframe中。

两个站点都使用session。我已经设置了session "当用户登录到父站点时,在父站点显示

这是我的代码片段

[HttpPost]
public IActionResult LoggedIn(LoginModel login)
{
if (IsAuthenticated(login.Username, login.Password))
{
HttpContext.Session.SetString("UName", login.Username);
return RedirectToAction("Index", "Configuration");
}
else
{
return View("Login");
}
}

现在我正在访问包含iframe来加载子网站的父网站页面之一,并且当子网页加载时,我以同样的方式在子网站中设置会话。

现在我试图访问父网站的另一个页面,看到我的父网站失去了会话"UName"立即.

如果我访问这两个网站作为一个单独的网站,那么这两个网站工作良好,没有丢失会话的任何问题。如果我删除了子网站的会话集,那么它的工作非常好。但要求是,我需要在父站点和子站点的会话。

两个网站是不同的,但是如果我设置了子网站的会话,为什么父网站的会话丢失了?

通过在startup.cs文件中为每个父站点和子站点设置不同的cookie名称,我已经解决了这个问题。

这是我的代码片段的父站点:

services.AddSession(options =>
{
options.Cookie.Name = ".Parent.Session";
options.Cookie.IsEssential = true;
options.IdleTimeout = TimeSpan.FromHours(24);
});

下面是我的子站点代码片段:

services.AddSession(options =>
{
options.Cookie.Name = ".Child.Session";
options.Cookie.IsEssential = true;
options.IdleTimeout = TimeSpan.FromHours(24);
});

最新更新