ASP. NET webform теряет сеанс при получении опубликованных данных из другого домена - PullRequest
0 голосов
/ 09 января 2020

Просто:

  1. На веб-сайте Пользователь входит в систему и создает несколько объектов сеанса.

  2. Веб-сайт A перенаправляет пользователя на страницу веб-сайта B с помощью Response.Redirect.

  3. Веб-сайт B отправляет коллекцию форм на страницу веб-сайта A с помощью кнопки отправки.

  4. В этом пункте c все сеансы этого указанного пользователя c потеряны, и Session_Start снова запускается.

Это одинаково как для локального, так и для рабочего доменов.

Это нормально, когда обе страницы находятся в одном домене, проблема возникает с двумя отдельными доменами.

На шаге 3 при использовании ссылка вместо кнопки для возврата на веб-сайт A (очевидно, wieem sh полное доменное имя), все в порядке и сеансы существуют.

Кажется, это кросс-платформенная проблема отправки / POST.

Сессии в InPro c с файлами cookie, изменение этого параметра не вариант.

Я ценю ваше любезное внимание.

PS Погуглив это, я обнаружил, что там как-то похожа проблема «потери сеанса» при перенаправлении с одной страницы на другую. это не вызвано response.Redirect.

Edit

Существует вероятность того, что эта проблема вызвана политикой SameSite Cook ie. Я провел несколько тестов на нескольких условиях, и я до сих пор не могу это подтвердить.

1 Ответ

0 голосов
/ 23 февраля 2020

Первый Это был проект веб-формы 4.7.1 ASP. NET, поэтому, если вы находитесь на MVC, вы можете получить только некоторую подсказку.

Как @ JohnPete22 упомянул Эта статья говорит, что SameSite Cook ie Политика (в качестве новой меры безопасности) предназначена для версии 4.7.2 и выше, в которой у вас есть некоторый контроль, по крайней мере, для включения или выключения, но он не говорит о том, что он также влияет на проекты 4.7.1 без контроля над этой функцией, если быть точным, он всегда включен, но команды управления не распознаются. NET версия платформы (я не знаю ни одного обновления. NET) чтобы решить это). Вот почему повторная публикация на странице в отдельном домене приводит к потере данных коллекции форм: для обеспечения междоменной безопасности.

Примечание. Это не решение, а обходной путь:

  1. Обновите свой проект до 4.7.2, чтобы включить режимы SameSite, это не имеет большого значения.

  2. Добавьте этот код в событие Session_Start Global.asax

    if (Response.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].SameSite = SameSiteMode.None;
    
        // Optional - This makes the feature secure
        // if (Request.IsSecureConnection)
        //      Response.Cookies["ASP.NET_SessionId"].Secure = true;
    }
    

    Я тестировал другие опции SameSiteMode.Strict и SameSiteMode.Lax, но не работал, поэтому я просто отключил эту функцию.

  3. Добавьте это в раздел Web.Config System.Web:

    <sessionState mode="InProc" cookieless="UseCookies" />
    
  4. Для обеспечения большей безопасности вы можете проверить исходный веб-сайт с помощью Request.UrlReferrer?.ToString() и соответственно изменить режим SameSite.

И это все , народ!

...