2015-04-23 10 views
9

Sto lavorando a un'estensione di Chrome che consente agli utenti di registrare tutte le richieste HTTP per un sito, modificare i pezzi della richiesta e quindi inviarla di nuovo.È possibile modificare i valori dei cookie in una richiesta ajax jQuery?

Spero di utilizzare jQuery's ajax method per costruire e inviare la richiesta modificata. Sono stato in grado di costruire le altre parti della richiesta, ma per quanto posso dire non c'è modo di includere i valori dei cookie nella richiesta.

Giusto per essere chiari - Non sto tentando di creare un cookie sul browser, sto provando a modificare il valore del cookie che verrà inviato insieme come parte della richiesta HTTP utilizzando il metodo Ajax di jQuery.

Questo può essere fatto con ajax di jQuery? Se no, c'è comunque da fare in javascript?

+0

** [Questo collegamento] (http://stackoverflow.com/questions/3340797/can-an-ajax-response-set-a-cookie) ** potrebbe essere utile .. :) –

+0

Cosa sono stai usando per intercettare le richieste in primo luogo? – Xan

+0

@ Xan, negli strumenti per sviluppatori di Chrome c'è un 'chrome.devtools.network.evento onRequestFinished' che si attiva quando una richiesta viene completata e presenta il contenuto della richiesta. –

risposta

5

Dal momento che si sta parlando di un'estensione Chrome, è possibile utilizzare per intercettare webRequest API e modifica le tue richieste.

chrome.webRequest.onBeforeSendHeaders.addListener(
    function(details) { 
    /* Identify somehow that it's a request initiated by you */ 

    for (var i = 0; i < details.requestHeaders.length; i++) { 
     if (details.requestHeaders[i].name === 'Cookie') { 
     /* Do something with it */ 
     break; 
     } 
    } 

    /* Add the Cookie header if it was not found */ 

    return {requestHeaders: details.requestHeaders}; 
    }, 
    {urls: ["*://*.example.com/*"]}, 
    ["blocking", "requestHeaders"] 
); 

In questo modo si dovrebbe essere in grado di modificare i cookie senza effettivamente modificare il cookie del browser. Ho detto "dovrebbe" perché non ho testato questa soluzione.

Alcuni punti importanti:

  • Sarà necessario permesso: "webRequest", "webRequestBlocking" e le autorizzazioni di accoglienza (per questo esempio, "*://*.example.com/")
  • C'è un avvertimento che non si può intercettare le proprie richieste sincrone, come precauzione contro deadlock. Finché AJAX è asincrono, non dovrebbe avere importanza.
  • Se è necessario impedire che Set-Cookie dalla risposta raggiunga l'archivio dei cookie, è possibile farlo modificando le intestazioni di risposta in onHeadersReceived. È possibile utilizzare l'ID richiesta per trovare la risposta corrispondente.
1

Non è possibile farlo ovunque utilizzando jQuery.ajax().

XMLHttpRequest non consente di modificare l'intestazione Cookie (see spec), e jQuery.ajax utilizza XMLHttpRequest sotto il cofano.

E l'utilizzo di XMLHttpRequest direttamente in javascript ha lo stesso problema, quindi nessun aiuto lì.

È possibile aggiungere cookie al documento corrente e dire a jQuery di comunicare all'XHR di inviare cookie tra domini con xhrFields: { withCredentials: true }, ma il sito di destinazione deve anche avere l'impostazione CORS corrispondente, che suona come non corrisponde al proprio caso d'uso.

Se volete provarlo, alcune risorse:

Sending credentials with cross-domain posts?

http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings (cercate xhrFields)

Problemi correlati