可以在jQuery ajax请求中修改cookie值吗?

时间:2015-04-23 03:52:29

标签: javascript jquery http cookies google-chrome-extension

我正在开发Chrome扩展程序,允许用户记录网站的所有HTTP请求,修改请求的部分然后重新发送。

我希望使用jQuery's ajax method来构造和发送修改后的请求。我已经能够构建请求的其他部分,但据我所知,没有办法在请求中包含cookie值。

为了清楚 - 我不是想在浏览器上创建一个cookie,我正在尝试使用jQuery的ajax方法修改将作为HTTP请求的一部分发送的cookie值。

这可以用jQuery的ajax完成吗?如果没有,无论如何在javascript中执行此操作?

1 个答案:

答案 0 :(得分:5)

由于您正在谈论Chrome扩展程序,因此您可以使用webRequest API来拦截和修改您的请求。

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"]
);

这样您就可以修改cookie而无需实际修改浏览器的cookie存储。 我说&#34;应该&#34;因为我没有测试过这个解决方案。

一些要点:

  • 您需要权限:"webRequest""webRequestBlocking"和主机权限(对于此示例,"*://*.example.com/"
  • 需要注意的是,您可以拦截自己的同步请求,以防止死锁。只要您的AJAX是异步的,就没关系。
  • 如果您需要阻止响应中的Set-Cookie到达Cookie存储区,您可以通过修改onHeadersReceived中的响应标头来实现。您可以使用请求ID查找相应的响应。