CORS cookie nicht gesendet wird, in Chrom
Habe ich einen einfachen Datei-upload-Formular mit jQuery-ajax-Aufruf auf eine andere domain. Der browser Cookies für die domain, und dieses cookie wird gesendet, mit der Anfrage im Firefox. Allerdings ist das cookie nicht vorhanden im Chrom, was zu Fehler beim log-in.
Ich habe überprüft, ob das cookie existiert in Chrome, die nur nicht gesendet, mit der Anfrage.
Den ajax-Aufruf:
Einige mag dies nicht notwendig sein. Es wurde Hinzugefügt, versucht mit Lösungsvorschlägen und Links zu demonstrieren diese versuche.
<head>
<script src="jquery-2.1.1.min.js"></script>
</head>
<form enctype="multipart/form-data" id="file" method="POST">
<input name="file" type="file" />
<input name="Submit" type="button" id="upload"/>
</form>
<script type="text/javascript">
$.support.cors = true
$('input#upload').click(function(){
var formData = new FormData($('form#file')[0]);
.ajax({
url: 'http://accounts.mysite.dev/file/saveasset',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
xhrFields: {
withCredentials: true
},
crossDomain: true
});
});
</script>
Firefox sendet die richtige Header, einschließlich des Benutzers cookie
POST /file/saveasset HTTP/1.1
Host: accounts.mysite.dev
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://phptest/htmltest/fileUpload.html
Content-Length: 8032
Content-Type: multipart/form-data; boundary=---------------------------4450073521062221055385143281
Origin: http://phptest
Cookie: Accounts=somecookiestuff
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Aber Chrome nicht
POST /file/saveasset HTTP/1.1
Host: accounts.mysite.dev
Content-Length: 7981
Accept: */*
Origin: http://phptest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGyMYxvKgEKWfBR5x
Referer: http://phptest/htmltest/fileUpload.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Ich glaube, dass der server richtig konfiguriert ist um dies zu ermöglichen, Herkunft und Anmeldeinformationen, aber Sie sind auch nicht geschickt in Chrome die Anfrage. Falls es relevant ist, mein server (php w/Zend) setzt
$this->_response->setHeader('Access-Control-Allow-Origin', 'http://phptest');
$this->_response->setHeader('Access-Control-Allow-Credentials', 'true');
Sehe ich keine OPTION preflight-Anfrage an den server.
Warum nicht Chrome senden mein cookie?
- Was Cookies sind, den Sie erwarten, um zu sehen, in Chrome, gesetzt in FF? Beide Anträge haben eine
Origin
header. - Der Cookie-header.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prüfen, ob Chrom zum sperren von 3rd party-cookies:
Menü → Einstellungen → Zeigen Erweiterte Einstellungen → Datenschutz: Inhaltseinstellungen
Stellen Sie sicher, dass das "Blockieren von Drittanbieter-cookies und Website-Daten" nicht aktiviert ist. Oder, wenn Sie etwas anderes blockieren von 3rd-party-cookies, deaktivieren Sie das auch.
Hatte das gleiche problem, das cross-site-JSONP-requests, cookies werden nicht gesendet, zusammen auf einen tag-Anfragen über mehrere domains hinweg.