Skip to main content

Command Palette

Search for a command to run...

Sessions vs JWT vs Cookies

Updated
4 min read
Sessions vs JWT vs Cookies
S
A front-end developer who’s always learning, building projects, and writing blogs to simplify web concepts

Authentication is something every developer uses, but not everyone fully understands. You log in, it works, and you move on. But behind the scenes, three core concepts are doing the work: sessions, cookies, and JWT tokens.

This article breaks them down in a simple and structured way so you can clearly understand how they work and when to use each.


What Are Cookies

A cookie is a small piece of data stored in the browser.

You can think of it as a note the server gives to your browser and says, keep this and send it back every time you make a request.

Example: When you log in, the server sends something like:

Set-Cookie: userId=12345

Now your browser stores it and sends it with every request:

Cookie: userId=12345

Cookies do not handle authentication by themselves. They only store and send data.


What Are Sessions

A session is a server-side method for storing user information. Instead of relying on the browser, the server retains all critical data.

Here's how it works:

When a user logs in, the server creates a session and saves user data in memory or a database. It then sends a session ID to the browser via a cookie. The browser stores this session ID and includes it with every request. The server uses this ID to retrieve the user data.

Example:

Server stores:

sessionId: abc123 → user: Soumyaditya

Browser only has:

Cookie: sessionId=abc123

So the browser does not know who the user is. Only the server knows.


What Are JWT Tokens

JWT stands for JSON Web Token, and it is a stateless method of authentication. Instead of storing user data on the server, all the necessary information is encoded directly inside the token itself.

A JWT is typically structured as three parts separated by dots, which are the header, payload, and signature, for example: header.payload.signature.

The payload contains user-related data such as { "userId": 123, "role": "admin" }. When a user logs in, the server generates this token and sends it to the browser.

The browser then stores the token, usually in local storage or cookies, and includes it in every subsequent request.

On receiving the request, the server verifies the token’s signature to ensure it has not been tampered with and then trusts the data inside it. Since all required information is contained within the token, no database lookup is needed for each request.


Stateful vs Stateless Authentication

Stateful authentication means the server stores user data. Sessions are stateful because the server remembers the user.

Stateless authentication means the server does not store user data. JWT is stateless because the token contains everything.

Stateful gives more control but needs storage. Stateless is faster and easier to scale but harder to manage when you want to log users out.


Session vs JWT Comparison

Feature Sessions JWT
Storage Server Client
State Stateful Stateless
Performance Slower due to lookup Faster
Scalability Limited High
Security Control Strong Depends on implementation
Logout Easy Difficult
Use Case Traditional apps APIs and mobile apps

When Should You Use Each

Use sessions when you are building traditional web applications where strong control over user sessions is important. For example, admin dashboards or banking systems.

Use JWT when you are building APIs, mobile applications, or distributed systems where scalability and performance matter more.



Conclusion

Authentication is not about picking a single technique and using it everywhere. Each approach solves a different problem in the client–server interaction model.

Cookies handle transport between browser and server. Sessions keep authoritative state on the server and give you tight control over user access. JWT shifts that state to the client, enabling horizontal scaling and simpler API interactions.

Choose sessions when you need strong control, immediate revocation, and simpler mental models. Choose JWT when you need stateless services, high scalability, and cross-service communication. In many real systems, a hybrid approach is the most practical.

Once you understand these trade-offs, authentication stops being confusing and becomes a clear architectural decision.

JavaScript Journey: From Basics to Core Concepts

Part 23 of 29

This series documents my journey of learning JavaScript and breaking down important concepts in a simple way. Each article covers a core JavaScript topic with clear explanations and beginner-friendly examples. From basic concepts to essential JavaScript features, the goal of this series is to make JavaScript easier to understand while practicing and sharing what I learn.

Up next

Storing Uploaded Files and Serving Them in Express

When people build web apps, file uploads show up very quickly. A user may upload a profile photo, a resume, a product image, or a PDF. That file needs to go somewhere, and later it often needs to be s