Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send cookie in HTTP POST Request in javascript

I am trying to make a POST request to the server (Which is a REST service)via javascript,and in my request i want to send a cookie.My below code is not working ,as I am not able to receive cookie at the server side.Below are my client side and server side code.

Client side :

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);

Server Side:

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
}
like image 604
arpit joshi Avatar asked Mar 01 '16 20:03

arpit joshi


People also ask

How do I send a cookie in a post request?

To send cookies to the server, you need to add the "Cookie: name=value" header to your request. To send multiple Cookies in one cookie header, you can separate them with semicolons. In this Send Cookies example, we are sending HTTP cookies to the ReqBin echo URL.

How are cookies sent in HTTP?

Cookies are transmitted using header fields in the HTTP protocol. Cookie lifecycle: The first time a browser connects with a particular server, there are no cookies. The server creates a unique identifier, and returns a Set-Cookie: header in the response that contains the identifier.

Are cookies sent in HTTP headers?

Cookies are passed as HTTP headers, both in the request (client -> server), and in the response (server -> client).


2 Answers

See the documentation:

Terminate these steps if header is a case-insensitive match for one of the following headers … Cookie

You cannot explicitly set a Cookie header using XHR.


It looks like you are making a cross origin request (you are using an absolute URI).

You can set withCredentials to include cookies.

True when user credentials are to be included in a cross-origin request. False when they are to be excluded in a cross-origin request and when cookies are to be ignored in its response. Initially false.

Such:

client.withCredentials = true;

This will only work if http://localhost:8080 has set a cookie using one of the supported methods (such as in an HTTP Set-Cookie response header).


Failing that, you will have to encode the data you wanted to put in the cookie somewhere else.

like image 199
Quentin Avatar answered Oct 11 '22 15:10

Quentin


This can also be done with the more modern fetch

fetch(url, {
    method: 'POST',
    credentials: 'include'
    //other options
}).then(response => console.log("Response status: ", response.status));
like image 6
PDStat Avatar answered Oct 11 '22 17:10

PDStat