2013-05-31 7 views
28

Ich möchte einen Cookie-Wert für eine AJAX-Anfrage setzen, aber der folgende Code funktioniert nicht.Wie setze ich Cookie-Wert mit AJAX-Anfrage?

$.ajax({ 
    type: "GET",  
    url: "http://example.com", 
    cache: false, 
    setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl", 
    crossDomain: true, 
    dataType: 'json', 
    success: function (data) { 
     alert(data); 
    }); 

Wie kann ich Cookies in der Kopfzeile setzen?

+4

Es gibt einfach nicht 'setCookies' Option in den Einstellungen. – gdoron

+0

was versuchst du zu tun ..? –

+1

Sie sollten Cookie früher in Javascript setzen und dann die Anfrage senden. Header enthalten Ihren Cookie auf AJAX-Anfrage. Verwenden Sie diese Funktionen, um in JS ein Cookie zu setzen und zu erhalten: http://www.w3schools.com/js/js_cookies.asp – Michael

Antwort

37

Grundsätzlich Ajax Anfrage sowie synchrone Anfrage sendet Ihr Dokument Cookies automatisch. Sie müssen also Ihr Cookie auf Dokumente setzen, nicht auf Anfragen. Ihre Anfrage ist jedoch domänenübergreifend, und die Dinge wurden komplizierter. Basierend auf this answer, zusätzlich Dokument Cookie zu setzen, sollten Sie seine Sende zu Cross-Domain-Umgebung ermöglichen:

type: "GET",  
url: "http://example.com", 
cache: false, 
// NO setCookies option available, set cookie to document 
//setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl", 
crossDomain: true, 
dataType: 'json', 
xhrFields: { 
    withCredentials: true 
}, 
success: function (data) { 
    alert(data); 
}); 
+4

Und was ist, wenn ich einen Cookie fälschen und senden möchte, ohne ihn zu setzen? Schließlich ist Cookie nur ein Header, komm schon! :) –

+0

@ TomášZato Laut [XHR specs] (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader() -Methode) können Sie es nicht tun. (Siehe Punkt 5 'Beende diese Schritte, wenn der Header keine Übereinstimmung zwischen Groß- und Kleinschreibung darstellt '...' Cookie' ... 'Die obigen Header werden vom Benutzeragenten gesteuert, damit sie diese Aspekte des Transports steuern können. Dies garantiert die Datenintegrität gegenüber einigermaßen. "). Ich glaube, du kannst immer noch einen Cookie * fälschen *, indem du ihn vor der Anfrage einstellst und bei einem "vollständigen" Rückruf löschst. Ich glaube, es ist das Beste, was wir im Browser tun können. – Tommi

+0

Normalerweise habe ich mich daran erinnert, dass JavaScript single-threaded ist. Wenn Sie also ein Cookie setzen und es anschließend löschen, wird es keine negativen Ergebnisse in anderen Skripten geben. –