ASP.NET Core 5.0 MVC потерял сеанс родительского веб-сайта, если использовал iframe для загрузки дочернего веб-сайта и установки сеанса внутри дочернего веб-сайта

У меня два разных сайта. Один используется как родительский, а другой используется как дочерний веб-сайт родительского веб-сайта и загружается в iframe родительского веб-сайта.

Оба сайта используют сеанс. Я установил сеанс UName на родительском сайте, когда пользователь вошел на родительский сайт.

Вот мой фрагмент кода.

[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.

Если я обращаюсь к обоим веб-сайтам как к отдельным веб-сайтам, то оба сайта работают нормально, и нет проблем с потерей сеанса. Если я удалил набор сеансов дочернего веб-сайта, он работает очень хорошо. Но требование состоит в том, что мне нужен сеанс как на родительском, так и на дочернем сайте.

Оба сайта разные, но почему сеанс родительского сайта потерян, если я установил сеанс дочернего сайта?


person Dipak Patel    schedule 15.02.2021    source источник
comment
Привет @DipakPatel, Из вашего описания кажется, что родительский и дочерний веб-сайты будут использовать одно и то же имя ключа сеанса, если вы настроите общий сеанс веб-сайта или файлы cookie аутентификации среди приложений ASP.NET, значение сеанса будет заменено при использовании одного и того же имя сеансового ключа. Итак, попробуйте использовать другое имя ключа сеанса, и перед получением значения из сеанса сначала проверьте, существует ли сеанс или нет. Вы можете обратиться к этой теме. для более подробной информации   -  person Zhi Lv    schedule 16.02.2021
comment
Спасибо за ответ Рамиль. На самом деле оба веб-сайта должны работать отдельно, поэтому я не хочу делиться сеансом родительского сайта с дочерним сайтом. Я пытался использовать другое имя сеанса как на родительском, так и на дочернем сайте, но все же он потерял сеанс родительского сайта. Решение состоит в том, что вам нужно будет установить разные имена файлов cookie на обоих сайтах, чтобы они работали. Смотрите мой ответ.   -  person Dipak Patel    schedule 17.02.2021
comment
Рад слышать, что вы решили проблему. Я предлагаю вам попробовать отметить свой ответ как принятый ответ. Это может помочь другим членам сообщества в будущем в подобных вопросах. Спасибо за понимание.   -  person Zhi Lv    schedule 18.02.2021
comment
Я пробовал это, но невозможно проголосовать за мой собственный ответ.   -  person Dipak Patel    schedule 19.02.2021


Ответы (1)


Я решил проблему, установив разные имена файлов cookie для каждого родительского и дочернего сайтов в файле startup.cs.

Вот мой фрагмент кода родительского сайта:

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);
        });
person Dipak Patel    schedule 16.02.2021