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

Abe*_*ler 10 javascript cookies jquery http google-chrome-extension

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

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

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

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

Xan*_*Xan 5

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

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"]
);
Run Code Online (Sandbox Code Playgroud)

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

一些要点:

  • 你需要的权限:"webRequest","webRequestBlocking"和主机的权限(在这个例子中,"*://*.example.com/")
  • 有一点需要注意,你不能拦截你自己的同步请求,作为防止死锁的预防措施.只要你的AJAX是异步的,它就没关系了.
  • 如果您需要阻止Set-Cookie响应到达cookie存储区,可以通过修改响应标头来实现onHeadersReceived.您可以使用请求ID查找相应的响应.