How to return an object by parsing http cookie header in JavaScript?

Cookies are small pieces of data that are sent from a website to a user's web browser. They are used to store information about the user, such as their preferences or login status.

When a user visits a website, their web browser will send a request to the server. The server will then send a response, which includes a set of headers. One of these headers is the "Cookie" header, which contains a list of all the cookies that are associated with the website.

Understanding Cookie Headers

Cookie headers can contain multiple name-value pairs separated by semicolons. For example:

Cookie: username=john; sessionId=abc123; theme=dark

Each pair consists of a name and value separated by an equals sign. Additional attributes like expiration dates and paths may also be present.

Parsing the Cookie Header

In order to parse the Cookie header, we need to first split it into individual name-value pairs. This can be done using the String.split() method.

Once we have an array of name-value pairs, we can then loop through it and create an object. The object will have the cookie name as the key and the cookie value as the value.

Let's say we have the following Cookie header:

username=john; expires=Thu, 18 Dec 2019 12:00:00 GMT; path=/

We can split it into individual name-value pairs like so:

var pairs = header.split(';');

This will give us the following array:

['username=john', ' expires=Thu, 18 Dec 2019 12:00:00 GMT', ' path=/']

We can then loop through this array and create an object:

var cookies = {};
for (var i = 0; i < pairs.length; i++) {
   var nameValue = pairs[i].split('=');
   cookies[nameValue[0].trim()] = nameValue[1];
}

This will give us the following object:

{ username: 'john', expires: 'Thu, 18 Dec 2019 12:00:00 GMT', path: '/' }

Complete Implementation

Here's a complete function that parses HTTP cookie headers and returns an object of all cookie name-value pairs:

<!DOCTYPE html>
<html>
<head>
   <title>Cookie Header Parser</title>
</head>
<body>
   <h3>Parsing HTTP Cookie Header</h3>
   <p>Object of all cookie name-value pairs:</p>
   <div id="result"></div>
   
   <script>
      // Function to parse the cookie header
      function parseCookieHeader(header) {
         // Split the header into individual name-value pairs
         var pairs = header.split(';');
         
         // Create an object to store the cookies
         var cookies = {};

         // Loop through the name-value pairs and store them in the object
         for (var i = 0; i < pairs.length; i++) {
            var nameValue = pairs[i].split('=');
            if (nameValue.length === 2) {
               cookies[nameValue[0].trim()] = nameValue[1].trim();
            }
         }
         
         // Return the object
         return cookies;
      }

      // Example cookie header
      var header = "username=john; sessionId=abc123; theme=dark; expires=Thu, 18 Dec 2019 12:00:00 GMT";

      // Parse the cookie header
      var cookies = parseCookieHeader(header);

      // Display the cookies
      console.log(cookies);
      document.getElementById("result").innerHTML = JSON.stringify(cookies, null, 2);
   </script>
</body>
</html>
{
  "username": "john",
  "sessionId": "abc123",
  "theme": "dark",
  "expires": "Thu, 18 Dec 2019 12:00:00 GMT"
}

Enhanced Version with Error Handling

Here's an improved version that handles edge cases and provides better error handling:

function parseCookieHeader(header) {
   if (!header || typeof header !== 'string') {
      return {};
   }
   
   var pairs = header.split(';');
   var cookies = {};
   
   for (var i = 0; i < pairs.length; i++) {
      var pair = pairs[i].trim();
      if (pair) {
         var equalIndex = pair.indexOf('=');
         if (equalIndex > 0) {
            var name = pair.substring(0, equalIndex).trim();
            var value = pair.substring(equalIndex + 1).trim();
            cookies[name] = value;
         }
      }
   }
   
   return cookies;
}

// Test with different cookie headers
var headers = [
   "username=john; sessionId=abc123",
   "theme=dark; lang=en; userId=12345",
   "token=xyz789; path=/admin; secure"
];

headers.forEach(function(header, index) {
   console.log("Header " + (index + 1) + ":", parseCookieHeader(header));
});
Header 1: { username: 'john', sessionId: 'abc123' }
Header 2: { theme: 'dark', lang: 'en', userId: '12345' }
Header 3: { token: 'xyz789', path: '/admin', secure: '' }

Key Points

  • Always trim whitespace from cookie names and values
  • Handle cases where cookies might not have values (like "secure" flag)
  • Validate input to prevent errors with malformed headers
  • Use indexOf() instead of split('=') for better handling of values containing equals signs

Conclusion

Parsing HTTP cookie headers involves splitting the string by semicolons and extracting name-value pairs. The enhanced version with proper error handling ensures robust parsing of various cookie header formats.

Updated on: 2026-03-15T23:19:00+05:30

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements