Печенье, потерянное при использовании cors ajax в новом окне - PullRequest
0 голосов
/ 28 апреля 2020

Я действительно запутался в этой проблеме. Надеюсь, вы могли бы дать мне несколько советов!

Во-первых, есть тест. html, который размещается на клиентском сервере и с кнопкой. Затем при нажатии кнопки вызывается приведенный ниже код ajax. Будет выведено новое окно.

test. html

$.ajax({
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }, 
    type: 'POST',
    url: 'a.com/a.aspx',   //the server file
    data: 'data=sth',
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    dataType: "text",
    success: function (data) {
            if (win != null) {
                if (win.opener == null) {
                    win.opener = self;
                }
                win.location.href = data;  //return the url of website B

                if (win.focus) win.focus();
            }

        },
        error: function (data) {
            alert("");

        }
    });

После этого возвращенные данные перейдут в новое окно на веб-сайт B.

Для вызовов cors ajax я добавил

crossDomain: true,
    xhrFields: {
        withCredentials: true
    }

к тесту . html и

    <add name="Access-Control-Allow-Origin" value="//client domain" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Method" value="POST,OPTIONS"/>
    <add name="Access-Control-Allow-Credentials" value="true"/>

к серверу web.config

Проблема в том, что в новом окне файлы cookie сбрасываются после перехода на веб-сайт B.

Обновления

win.location.href = 'a.com';  // it works
win.location.href = other domain; // cookies is reset

Я обнаружил, что win.location.href теряет сеанс с кросс-доменом. Как с этим бороться?

...