2016-03-01 59 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