Поскольку Chrome 79 сеанс "потерян" после перенаправления - PullRequest
3 голосов
/ 20 января 2020

У меня есть странная вещь, которую я не могу понять с момента выпуска Chrome 79.

На сайте, который вы регистрируете. После регистрации нужно заплатить. Оплата происходит на другом сайте, Buckaroo является поставщиком платежей. После оплаты вы снова будете перенаправлены на наш сайт (через POST-запрос). Именно здесь начинаются забавные вещи: сначала вы вошли в систему, так что вы все равно должны войти в систему, поскольку вы отсутствовали в течение короткого периода времени. Но сессия, похоже, не распознается, поэтому вы будете перенаправлены на страницу входа. Но если я возьму тот же URL перенаправления с одного шага раньше, он будет работать как положено.

Похоже, что это как-то связано с перенаправлением из других доменов или что-то в этом роде?

Я искал в коде, во время отладки вижу, что сеанс не может быть найден , Последнее изменение в этой части кода более чем за год go, и с тех пор работало идеально. Таким образом, у меня нет примеров кода, добавленных к этому вопросу. Я искал примечания к выпуску Chrome 79, но до сих пор не знаю.

Есть подсказка / идея, где искать дальше?

- РЕДАКТИРОВАТЬ -

Я обнаружил, что идентификатор сессии действительно изменяется ..

На моем сайте выберите способ оплаты (после подтверждения вы будете перенаправлены): HttpContext.Session.SessionID: "qibxyymxhvev231n01ndlkyx"

Возвращение из поставщик платежей: HttpContext.Session.SessionID: "mwkfptaod0hpyuedvaimtqd0"

Повторное обновление сайта: HttpContext.Session.SessionID: "qibxyymxhvev231n01ndlkyx"

Ответы [ 2 ]

4 голосов
/ 12 февраля 2020

Столкнулся с той же проблемой. Оказывается, это связано с Microsoft.

Добавление CookieSameSite = "NONE" в WebConfig, вероятно, решит вашу проблему.

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

<system.webServer>
  <rewrite>
  <outboundRules>
    <clear />
    <rule name="Add SameSite" preCondition="No SameSite">
      <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
      <action type="Rewrite" value="{R:0}; SameSite=None" />
      <conditions> </conditions>
    </rule>
    <preConditions>
      <preCondition name="No SameSite">
        <add input="{RESPONSE_Set_Cookie}" pattern="." />
        <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

0 голосов
/ 02 апреля 2020

Я боролся с той же проблемой. Я нашел хорошую статью по этому вопросу. samesite = нет cookie Статья написана для ASP. NET пользователей.

Я работаю в php. Но материал также имеет отношение к php.

Только там вы должны использовать другие методы. Методы также зависят от используемой версии php - до php 7.3 вы можете использовать что-то подобное:

setcookie('PHPSESSID', $_REQUEST['id'], time() + 60 * 60 * 24 * 1, '/; samesite=None; Secure;');

С php 7.3 вы можете использовать функцию set_cookie_params ();

Краткое резюме статьи заключается в том, что проблема вызвана сеансом пользовательского набора без флага «samesite = none; Secure;». Это происходит начиная с Chrome версии 80. Имейте в виду, что, исправив проблему для Chrome 80, вы можете сломать свое приложение для пользователей Apple ... Поэтому вам нужно добавить проверку для пользовательского агента / браузера. Вы найдете больше информации в статье выше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...