在javascript中发送HTTP POST请求中的cookie

问题描述 投票:8回答:2

我试图通过javascript向服务器(这是一个REST服务)发出POST请求,并在我的请求中我想发送一个cookie。我的下面的代码不起作用,因为我无法在服务器上收到cookie side.Below是我的客户端和服务器端代码。

客户端 :

var client = new XMLHttpRequest();
          var request_data=JSON.stringify(data);
var endPoint="http://localhost:8080/pcap";
var cookie="session=abc";
          client.open("POST", endPoint, false);//This Post will become put 
          client.setRequestHeader("Accept", "application/json");
          client.setRequestHeader("Content-Type","application/json");

          client.setRequestHeader("Set-Cookie","session=abc");
          client.setRequestHeader("Cookie",cookie);
          client.send(request_data);

服务器端:

public @ResponseBody ResponseEntity getPcap(HttpServletRequest request,@RequestBody PcapParameters pcap_params ){

Cookie cookies[]=request.getCookies();//Its coming as NULL
        String cook=request.getHeader("Cookie");//Its coming as NULL
}
javascript cookies http-headers http-post httprequest
2个回答
7
投票

the documentation

如果header是以下标题之一的区分大小写匹配,请终止这些步骤... Cookie

您无法使用XHR显式设置Cookie标头。


看起来你正在做一个跨源请求(你使用的是绝对URI)。

您可以将withCredentials设置为包含Cookie。

当用户凭据包含在跨源请求中时为True。如果要在跨源请求中排除它们以及在响应中忽略cookie,则为false。最初是假的。

这样:

client.withCredentials = true;

这只有在http://localhost:8080使用其中一种受支持的方法(例如在HTTP Set-Cookie响应头中)设置cookie时才有效。


如果做不到这一点,您将不得不在其他地方对要放入cookie的数据进行编码。


1
投票

这也可以用更现代的fetch来完成

fetch(url, {
    method: 'POST',
    credentials: 'include'
    //other options
}).then(response => console.log("Response status: ", response.status));
© www.soinside.com 2019 - 2024. All rights reserved.