Cross-domein POST-verzoek verzendt geen cookie Ajax JQuery

Het lijkt erop dat iets soortgelijks al is besproken op stackoverflow, maar ik kon niet precies hetzelfde vinden.

Ik probeer een cookie te verzenden met CORS (Cross-origin resource sharing), maar het werkt niet.

Dit is mijn code.

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'json',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

Ik zie deze cookie niet in request HEADER.


Antwoord 1, autoriteit 100%

U kunt geen cookies instellen of lezen op CORS-verzoeken via JavaScript. Hoewel CORS cross-origin-verzoeken toestaat, zijn de cookies nog steeds onderworpen aan het beleid van dezelfde oorsprong van de browser, wat betekent dat alleen pagina’s van dezelfde oorsprong de cookie kunnen lezen/schrijven. withCredentialsbetekent alleen dat alle cookies die door de externe host zijn ingesteld naar die externe host worden verzonden. U moet de cookie van de externe server instellen met behulp van de Set-Cookie-header.


Antwoord 2, autoriteit 32%

Houd er rekening mee dat dit het proces voor het delen van cookies niet oplost, aangezien dit over het algemeen een slechte gewoonte is.

U moet JSONP als uw type gebruiken:

Van $.ajax-documentatie:
Verzoeken tussen verschillende domeinen en dataType: “jsonp”-verzoeken ondersteunen geen synchrone werking.

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'jsonp',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

Antwoord 3, autoriteit 27%

Er zijn een hele reeks recente veranderingen in deze arena geweest, dus ik dacht dat een nieuw antwoord nuttig zou zijn.

Om een ​​cookie tijdens een verzoek door de browser naar een andere site te laten sturen, moet aan de volgende criteria worden voldaan:

Veel mensen vinden hun weg naar deze post om lokale ontwikkeling te doen tegen een afgelegen eindpunt, wat mogelijk is als aan de bovenstaande criteria wordt voldaan.


Antwoord 4, autoriteit 5%

Ik had hetzelfde probleem. De sessie-ID wordt in een cookie verzonden, maar aangezien het verzoek domeinoverschrijdend is, zullen de beveiligingsinstellingen van de browser voorkomen dat de cookie wordt verzonden.

Oplossing:genereer de sessie-ID op de client (in de browser), gebruik Javascript sessionStorage om de sessie-ID op te slaan en stuur de sessie-ID met elk verzoek naar de server.

Ik worstelde veel met dit probleem, en er waren niet veel goede antwoorden rond. Hier is een artikel over de oplossing: Javascript cross-domein aanvraag met sessie

Other episodes