2016-03-01 84 views
4

我想通过javascript向服务器发送POST请求(这是一个REST服务),并且在我的请求中,我想发送一个cookie.My下面的代码不工作,因为我无法在服务器端接收cookie。以下是我的客户端和服务器端代码。在HTTP POST请求中发送cookie在javascript中

客户端:

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 
} 
+1

'setRequestHeader(“Set-Cookie”,“session = abc”);' - Set-Cookie是**响应**标头,而不是请求标头。 – Quentin

+0

另请参阅此线程http://stackoverflow.com/questions/2870371/why-is-jquerys-ajax-method-not-sending-my-session-cookie –

回答

3

参见the documentation

终止这些步骤,如果报头为一个的情况下不敏感的匹配下列标题... Cookie

您不能使用XHR明确设置Cookie标头。


看起来您正在制作一个交叉原点请求(您正在使用绝对URI)。您可以将withCredentials设置为包含Cookie。

如果要在跨源请求中包含用户凭据,则为true。当它们被排除在一个跨域请求中,并且在响应中cookie被忽略时,这个错误是错误的。最初是错误的。

这样:

client.withCredentials = true; 

如果http://localhost:8080已设定使用一种支持的方法一个cookie这只会工作(如在HTTP Set-Cookie响应头)。


如果没有这样做,你将不得不编码你想放在cookie中的数据。

+0

应该我的代码是 client.setRequestHeader(“Set-Cookie ”, “会话= ABC”); client.withCredentials = true; 并添加交叉原点(我已经在自己的服务器端跨原点) 服务器: \t @CrossOrigin(来源= “*”) \t @RequestMapping(值= URIConstansts.PCAP,产生= { “应用/ JSON” },method = RequestMethod.POST) \t public @ResponseBody ResponseEntity getPcap(HttpServletRequest request,@ RequestBody PcapParameters pcap_params) –

+0

'client.setRequestHeader(“Set-Cookie”,“session = abc”);' - 不,这是一个响应头。 – Quentin

+0

'client.withCredentials = true; ' - 是的,如果你的服务器要通过可接受的机制来设置cookie(比如Set-Cookie HTTP响应头部)。 – Quentin