DEV Community

Rutuja Chandgude
Rutuja Chandgude

Posted on

JavaScript Cookies

What are cookies?

Cookies are data,stored in small text files,on your computer.

When a web server has sent a web page to a browser, the connection is shut down, and the server forgets everything about the user.

Cookies were invented to solve the problem "how to remember information about the user":

• When a user visits a web page, his/her name can be stored in
a cookie.
• Next time the user visits the page, the cookie "remembers"
his/her name.
Cookies are saved in name-value pairs like:

username = John Doe

When a browser requests a web page from a server, cookies belonging to the page are added to the request. This way the server gets the necessary data to "remember" information about users.

NOTE: None of the examples below will work if your browser has local cookies support turned off.

Create a Cookie with JavaScript:
JavaScript can create, read, and delete cookies with the document.cookie property.

With JavaScript, a cookie can be created like this:

document.cookie = "username=John Doe";

You can also add an expiry date (in UTC time). By default, the cookie is deleted when the browser is closed:

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC";

With a path parameter, you can tell the browser what path the cookie belongs to. By default, the cookie belongs to the current page.

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

• Read a Cookie with JavaScript:

With JavaScript, cookies can be read like this:

let x = document.cookie;

document.cookie will return all cookies in one string much like: cookie1=value; cookie2=value; cookie3=value;

• Change a Cookie with JavaScript:
With JavaScript, you can change a cookie the same way as you create it:

document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

The old cookie is overwritten.

• Delete a Cookie with JavaScript:

Deleting a cookie is very simple.

You don't have to specify a cookie value when you delete a cookie.

Just set the expires parameter to a past date:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

NOTE:You should define the cookie path to ensure that you delete the right cookie.
Some browsers will not let you delete a cookie if you don't specify the path.

• The Cookie String:

The document.cookie property looks like a normal text string. But it is not.

Even if you write a whole cookie string to document.cookie, when you read it out again, you can only see the name-value pair of it.

If you set a new cookie, older cookies are not overwritten. The new cookie is added to document.cookie, so if you read document.cookie again you will get something like:

cookie1 = value; cookie2 = value;

JavaScript Cookie Example:

In the example to follow, we will create a cookie that stores the name of a visitor.

The first time a visitor arrives to the web page, he/she will be asked to fill in his/her name. The name is then stored in a cookie.

The next time the visitor arrives at the same page, he/she will get a welcome message.

For the example we will create 3 JavaScript functions:

A function to set a cookie value

A function to get a cookie value

A function to check a cookie value
Enter fullscreen mode Exit fullscreen mode

• A function to set a cookie:

function setCookie(cname, cvalue, exdays) {
const d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
let expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

• A function to get a cookie:

function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i <ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

• A Function to Check a Cookie:

function checkCookie() {
let username = getCookie("username");
if (username != "") {
alert("Welcome again " + username);
} else {
username = prompt("Please enter your name:", "");
if (username != "" && username != null) {
setCookie("username", username, 365);
}
}
}

Discussion (1)

Collapse
lukeshiru profile image
LUKESHIRU

2 things:

  • Nowadays, pretty much any webapp has readonly cookies. This means that the cookies are set in the server side and you can't change them from the client side, so ideally if you want to save data in the client side, you should use localStorage, which is way better suited for this task.
  • You can simplify your function to get cookies, and this way you'll not need stuff like checkCookie, here it is:
// Let's say you have this in your cookies:
// foo=1; bar=2

const cookies = Object.fromEntries(
    document.cookie.split("; ").map(cookie => cookie.split("=")),
);

// cookies now has an object with each property representing a value in your cookies:
cookies.foo === 1; // 🎉
cookies.bar === 2; // 🎉
Enter fullscreen mode Exit fullscreen mode

The code above simply takes document.cookie, splits that using the "; " string, and then we map over it splitting every key/value using the equal sign, so we get an array of tuples [key, value], finally we use Object.fromEntries to turn that array of entries into an object.

Cheers!