Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以在jQuery ajax请求中修改cookie值吗?_Javascript_Jquery_Http_Cookies_Google Chrome Extension - Fatal编程技术网

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

Javascript 可以在jQuery ajax请求中修改cookie值吗?,javascript,jquery,http,cookies,google-chrome-extension,Javascript,Jquery,Http,Cookies,Google Chrome Extension,我正在开发一个Chrome扩展,它允许用户记录一个站点的所有HTTP请求,修改请求片段,然后重新发送 我希望使用来构造和发送修改后的请求。我已经能够构造请求的其他部分,但据我所知,没有办法在请求中包含cookie值 需要明确的是,我并不是试图在浏览器上创建cookie,而是试图使用jQuery的ajax方法修改cookie值,该值将作为HTTP请求的一部分发送 这可以通过jQuery的ajax实现吗?如果没有,是否还有其他方法可以在javascript中实现 使用jQuery.ajax()在任何

我正在开发一个Chrome扩展,它允许用户记录一个站点的所有HTTP请求,修改请求片段,然后重新发送

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

需要明确的是,我并不是试图在浏览器上创建cookie,而是试图使用jQuery的ajax方法修改cookie值,该值将作为HTTP请求的一部分发送


这可以通过jQuery的ajax实现吗?如果没有,是否还有其他方法可以在javascript中实现

使用
jQuery.ajax()
在任何地方都不可能做到这一点

XMLHttpRequest
不允许修改Cookie头(),而
jQuery.ajax
在引擎盖下使用
XMLHttpRequest

在javascript中直接使用
XMLHttpRequest
也有同样的问题,因此没有帮助

您可以将cookie添加到当前文档中,并告诉jQuery告诉XHR使用
xhrFields:{withCredentials:true}
跨域发送cookie,但目标站点还必须具有相应的CORS设置,这听起来与您的用例不匹配

如果您想尝试,请参阅以下资源:


(寻找xhrFields)

既然您谈论的是Chrome扩展,您可以使用它来拦截和修改您的请求

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"]
);
chrome.webRequest.onBeforeSendHeaders.addListener(
功能(详情){
/*以某种方式确定这是您发起的请求*/
对于(var i=0;i
通过这种方式,您应该能够修改cookie,而无需实际修改浏览器的cookie存储。我说“应该”,因为我还没有测试这个解决方案

一些要点:

  • 您需要权限:
    “webRequest”
    “webRequestBlocking”
    和主机权限(在本例中,
    “*://*.example.com/”
  • 有一个警告,您不能拦截自己的同步请求,以防止死锁。只要您的AJAX是异步的,它就不重要了
  • 如果需要防止响应到达Cookie存储区,可以通过修改
    onHeadersReceived
    中的响应标题来实现。您可以使用请求ID查找相应的响应

可能会有帮助:)您首先使用什么来拦截请求?@Xan,在Chrome开发者工具中有一个
Chrome.devtools.network.onRequestFinished
事件,当请求完成并包含请求的内容时触发。有两种类型的cookie,一种是javascript引擎可以访问的,另一种是它不能访问的。在一个完整的http请求中,两种类型都被发送。我相信您需要使用jquery以外的其他工具来执行任务。有趣的是,可以用纯javascript完成吗?或者您是否认为jQuery和纯javascript都不具备这种能力?