2010-05-13 8 views
31

Ich habe einen Webdienst, den ich vom Skript aus aufrufen kann, der aber keine in Cookies gespeicherten Informationen benötigt. Jedes Mal, wenn ich eine Anfrage an den Dienst stelle, wird der Cookie mitgeschickt. Ich verstehe, dass standardmäßig Cookies mit HTTP-Anfrage gesendet werden, aber gibt es überhaupt eine Möglichkeit, dieses Verhalten zu überschreiben und den Cookie nicht zu senden?Verhindern, dass Cookies auf AJAX gesendet werden Anfrage

Auf den Punkt gebracht, ich meine Anfrage wie dieser Ausgabe:

$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    data: data, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) { successFunc(response); }, 
    error: function(xhr) { errorFunc(xhr); } 
}); 

Antwort

0

Sie sind richtig zu sagen, dass Browser (Pfad + Domain + Session) Cookies zusammen mit dem HTTP-Anforderung senden entsprechen. Dies ist entscheidend, damit der Cookie-Mechanismus funktioniert.

Können Sie nicht einfach die Kekse nicht lesen?

Darüber hinaus können Sie festlegen, welches Verzeichnis (und seine Unterverzeichnisse) auf den Cookie zugreifen können, wenn der Cookie ursprünglich festgelegt wurde.

Wenn Sie beispielsweise festlegen, dass ein Cookie in/foo/bar/only gelesen wird, kann eine Datei in /whatever/ajaxHandler.php diese Cookies nicht sehen. diese

Check out: http://us.php.net/setcookie

Während ich bin nicht sicher, wenn Sie PHP verwenden, könnte es ein guter Ausgangspunkt für Sie sein.

+5

Das Ignorieren des Cookies löst nicht das Problem, dass es Bandbreite verbraucht – Osseta

+1

Foxtrot, ich bin gespannt, was Sie mit "einfach nicht lesen den Cookie" meinen. Um Ihren Blickwinkel auf bestimmte Verzeichnisse zu richten, ist es auch möglich, einen Cookie für den gesamten Bereich zu setzen, ABER ein bestimmtes Verzeichnis? Wenn das der Fall ist, würde ich damit etwas anfangen können, glaube ich. Denken Sie daran, dass dies alles in der gleichen Domäne geschieht und durch einen Pfad in dieser Domäne unterschieden werden müsste. Ich weiß nicht, dass Cookies damit umgehen können. Kennt jemand, ob jQuery selbst das Senden von Cookies mit einer AJAX-Anfrage verhindert? Das wäre die ultimative Lösung für mich. =] – Simon

+1

Man hat nicht immer die Wahl, einen Cookie nicht zu lesen, beispielsweise wenn die Autorisierung über Cookies in einem Framework erfolgt, bevor der View-Code ausgeführt wird. –

15

Senden Sie AJAX-Anforderungen an eine Cookie-lose Subdomäne auf Ihrem Server. Deine App ist also www.mydomain.com und Ajax-Anfragen werden von api.mydomain.com geliefert, auf die du nie einen Cookie gesetzt hast. Auch eine gute Idee, dies mit statischen Dateien wie Bilder usw. zu tun ...

siehe die „Use Cookies freie Domains für Komponenten“ Abschnitt http://developer.yahoo.com/performance/rules.html

+0

Osseta, sehr guter Ruf auf cookielos Domains. Wir tun dies zur Zeit für andere Ressourcen wie fast alle unsere statischen Dateien. Ich muss ein bisschen mehr über diesen Webdienst ausarbeiten. Es ist nicht eigenständig und in einem Unterverzeichnis enthalten, also verwende ich für diese Diskussion Methoden in derselben Domäne, unter der sich meine Webanwendung befindet, aber im Unterpfad "/publicservices/service.asmx". – Simon

+0

Ich bin mir nicht sicher, aber ich habe den Eindruck, dass Cookie eine globale Konfiguration pro (Sub-) Domain ist. Sie sind entweder ein- oder ausgeschaltet und können nicht auf Anfrage konfiguriert werden. – Osseta

+0

Leider glaube ich, dass Sie Recht haben. Vielen Dank für Ihre Einsicht! – Simon

1

Nein, das Cookie wird immer gesendet werden.

Sie könnten wie Ihre Cookies an den Browser gesendet werden, und verwenden Sie die http Flagge auf ihnen, was bedeutet, dass sie nicht per Javascript gesendet werden.

Oder (die viele Websites verwenden), erstellen Sie eine neue Subdomain, an die Sie nie Cookies gesendet haben.

6

würde Ein weiterer Ansatz zur tun $ Schnipsel vor sein:
1. die Cookies vom Browser für Ihre Domain mit Javascript bekommen (sie in einer globalen Variablen speichern)
2. die Cookies mit Javascript für Ihre Domain löschen aus dem Browser
3. Machen Sie den $ .ajax Anruf
4. setzen Sie die Cookies (von der globalen Variable) zurück in den Browser.

Wenn Sie die Cookies aus Ihrer Domain überhaupt nicht benötigen, löschen Sie sie einfach (überspringen Sie also 1. und 4.).

+0

Wenn ich dir nur 1000 Upvotes geben könnte ... –

+0

Fast perfekt ... weil es keine Möglichkeit gibt, wie viel das Cookie noch leben würde. –

0

Das Flag withCredentials wird benötigt, um Cookies mit Ajax-Ursprungsrufen zu senden.

Siehe: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

es zu falscher Einstellung werden Cookies verhindern, gesendet werden.

Bei Anfragen mit demselben Ursprung müssen Sie den anderen Antworten folgen, die hier erwähnt werden.

+0

Wie versöhnen Sie das damit? _Setting withCredentials hat keine Auswirkungen auf Anfragen der gleichen Site._ Obwohl in meiner ursprünglichen Frage vor fast sieben Jahren nicht offensichtlich, wurde dieser .NET-Dienst in die Website eingebettet (_.asmx_ service in einem Ordner auf der Website geschachtelt) . – Simon

+0

Fair genug. Ich werde klarstellen, dass withCredentials = false das Senden von Cookies nur bei Cross-Ursprungs-Anfragen verhindert. –

Verwandte Themen