Предотвратить отправку файлов cookie по запросу AJAX - PullRequest
34 голосов
/ 13 мая 2010

У меня есть веб-сервис, который я вызываю из скрипта, но для которого не требуется информация, хранящаяся в файлах cookie. Каждый раз, когда я делаю запрос в сервис, cookie отправляется вместе с ним. Я понимаю, что по умолчанию куки отправляются с HTTP-запросом, но есть ли вообще возможность переопределить это поведение и не отправлять куки?

В двух словах, я выдаю свой запрос следующим образом:

$.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); }
});

Ответы [ 5 ]

17 голосов
/ 14 мая 2010

Отправляйте запросы AJAX на поддомен без файлов cookie на вашем сервере. Таким образом, ваше приложение - www.mydomain.com, а запросы ajax обслуживаются с api.mydomain.com, для которого вы никогда не устанавливаете куки. Также отличная идея сделать это со статическими файлами, такими как изображения и т.д ...

см. Раздел «Использование доменов без файлов cookie для компонентов» http://developer.yahoo.com/performance/rules.html

7 голосов
/ 13 декабря 2012

Другой подход был бы до создания $ .ajax:
1. получить куки из браузера для вашего домена с помощью javascript (сохранить их в глобальной переменной)
2. удалите куки для вашего домена с помощью javascript из браузера
3. сделать вызов $ .ajax
4. Поместите куки (из глобальной переменной) обратно в браузер.

Если вам не нужны файлы cookie с вашего домена, просто удалите их (поэтому пропустите 1. и 4.).

1 голос
/ 08 февраля 2017

Флаг withCredentials необходим для фактической отправки файлов cookie с вызовами ajax из разных источников.

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

Если установить значение false, файлы cookie будут отправлены.

При запросах того же происхождения вам нужно будет следовать другим ответам, упомянутым здесь.

0 голосов
/ 24 мая 2012

Нет, куки всегда будут отправлены.

Вы можете узнать, как ваши куки отправляются в браузер, и использовать флаг http, что означает, что они не будут отправлены через javascript.

Или (которым пользуются многие сайты) создайте новый поддомен, на который вы никогда не отправляли файлы cookie.

0 голосов
/ 13 мая 2010

Вы правы, говоря, что браузеры отправляют совпадающие (путь + домен + сессия) куки вместе с HTTP-запросом. Это очень важно для работы механизма cookie.

Не могли бы вы просто не читать куки?

Кроме того, когда файл cookie изначально установлен, вы можете указать, какой каталог (и его подкаталоги) может обращаться к файлу cookie.

Например, если вы установили cookie для чтения только в / foo / bar /, файл, расположенный в /whwhat/ajaxHandler.php, не сможет увидеть эти эти куки.

Проверьте это: http://us.php.net/setcookie

Хотя я не уверен, что вы используете PHP, это может быть хорошей отправной точкой для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...