Есть ли способ не отправлять куки при создании XMLHttpRequest на том же источнике? - PullRequest
7 голосов
/ 27 января 2012

Я работаю над расширением, которое анализирует фид gmail для пользователей.Я разрешаю пользователям указывать имя пользователя / пароль, если они не хотят оставаться в системе.Но это не работает для многократного входа в систему, если пользователь вошел в систему и предоставил имя пользователя / пароль для другой учетной записи.Поэтому я хочу избежать отправки каких-либо файлов cookie, но все же смогу отправить имя пользователя / пароль в вызове send ().

Ответы [ 2 ]

5 голосов
/ 05 мая 2015

Начиная с Chrome 42, fetch API позволяет расширениям Chrome (и веб-приложениям в целом) выполнять запросы без файлов cookie. HTML5 Rocks предлагает вводное руководство по использованию API выборки .

Расширенная документация по fetch в настоящее время довольно скудна, но интерфейс API из спецификации это отличная отправная точка.Алгоритм выборки, описанный ниже интерфейса, показывает, что запросы, сгенерированные fetch, по умолчанию не имеют учетных данных!

fetch('http://example.com/').then(function(response) {
    return response.text(); // <-- Promise<String>
}).then(function(responseText) {
    alert('Response body without cookies:\n' + responseText);
}).catch(function(error) {
    alert('Unexpected error: ' + error);
});

Если вы хотите действительно анонимные запросы, вы также можете отключить кеш:

fetch('http://example.com/', {
    // credentials: 'omit', // this is the default value
    cache: 'no-store',
}).then(function(response) {
    // TODO: Handle the response.
    // https://fetch.spec.whatwg.org/#response-class
    // https://fetch.spec.whatwg.org/#body
});
3 голосов
/ 14 мая 2012

Это можно сделать с помощью модуля chrome.cookies .Идея состоит в том, чтобы получить текущие файлы cookie, сохранить их, удалить их из магазина cookie браузера, отправить ваш запрос и, наконец, восстановить их:

var cookies_temp = []; // where you put the cookies first
var my_cookie_store = []; // the cookies will be there during the request
var details = {/*your code*/}; // the first parameter for chrome.cookies.getAll()
var start_kidnapping = function(cookies) {
    cookies_temp = cookies.slice();
    kidnap_cookie();
};
var kidnap_cookie = function() {
    // This recursive function will store the cookies from cookies_temp to
    // my_cookie_store and then remove them from the browser's cookie store.
    if (cookies_temp.length == 0) { // when no more cookies, end recursion
        send_request();
    };
    else {
        var cookie = cookies_temp.pop();
        // We store url as a property since it is useful later.
        // You may want to change the scheme.
        cookie.url = "http://" + cookie.domain + cookie.path;
        my_cookie_store.push(cookie); // save it
        chrome.cookies.remove({url: cookie.url, name: cookie.name}, kidnap_cookie);
    };
};
var send_request = function() {
    // Send your request here. It can be asynchronous.
    for (var i = 0, i < my_cookie_store.length; i++){
        delete cookie.hostOnly; // these 2 properties are not part of the
        delete cookie.session;  // object required by chrome.cookies.set()
        // note that at this point, cookie is no longer a Cookie object
        chrome.cookies.set(my_cookie_store[i]); // restore cookie
    };
    my_cookie_store = []; // empty it for new adventures
};
chrome.cookies.getAll(details, start_kidnapping); // start

В качестве альтернативы, более простое решение - открыть окно в режиме инкогнитоотправит запрос, используя модуль chrome.windows , но это не позволит вам связаться с остальной частью вашего добавочного номера.Обратите внимание, что вам, возможно, придется изменить свойство incognito вашего манифеста на split:

var incognito_window = {
    "url": "incognito.html",
    "focused": false, // do not bother user
    "incognito": true
}
chrome.windows.create(incognito_window);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...