Difference between cookies, session and tokens
By Valentin Despa
Summary
## Key takeaways - **Login Exchanges Credentials for Session ID Cookie**: After verifying your username and password, the server creates an entry in the database with your login event and gives you a session id in a form of a cookie. You have exchanged your username and password for this cookie containing the session id. [00:54], [01:05] - **Browser Auto-Sends Session ID Cookie**: Next time you request another page, your browser will automatically send a cookie containing your session id, which the server will check to see if it is still valid. The second time your username and password are no longer required in order to uniquely identify you. [02:11], [02:22] - **Logout Deletes Session and Cookie**: If you log out, your login session will be invalidated in the database but also the server will instruct the browser to delete the cookie containing the session id. Even so if the session on the server expires the cookie becomes worthless. [02:33], [02:43] - **Tokens for Third-Party App Access**: You don't want to give your username and password to this app which is not created nor verified by your bank, so the app will receive a token granting access to your transactions. This token is like a temporary password that gives limited access to your data. [06:19], [07:01] - **JWT Contains Signed Session Data**: A JWT token contains information such as the customer id, the scope that this token grants, when the token was created and when it expires, and this information is cryptographically signed. It is easy to verify that the content has not been modified. [08:17], [08:39] - **Tokens vs Sessions: Multi-Party Use**: When using cookies there are only two parties involved: you and the server, but when using tokens the interaction typically involves multiple parties that may not trust each other. Tokens typically follow a standard to ensure interoperability while sessions are implemented as needed by the server. [09:26], [09:49]
Topics Covered
- Cookies Exchange Passwords for Session IDs
- Servers Never Trust Client Cookies
- Tokens Enable Third-Party Access
- Tokens Differ from Sessions Multi-Party
Full Transcript
so what are cookies and sessions to understand these concepts we need to get back to the basics let's take this example you want to login to your bank account
you are provided with a logging screen where you can enter your username and password after you hit the login button your username and password go to your bank's server
nowadays the logging procedure typically includes another verification step such as getting a text message but to make it more understandable i have simplified it
next the server needs to verify that you are who you pretend to be so the bank server will check against the database to see if your credentials match if
everything looks good the server will show your account overview page but there is more that is happening in the background once the server verifies your
credentials it will also create an entry in the database with your login event and give you a session id in a form of a cookie in other words you have exchanged
your username and password for this cookie containing the session id the session id is just a unique identifier for your logging session and
it is randomly generated the concept is similar to giving your code at the cloakroom and receiving a ticket with a number i've explained the basics around cookies
in another tutorial which i will link in the description you can check this login process for yourself on almost any website to better understand it
in google chrome or any other browser you can open the developers tools and inspect your network traffic for example here i've sent my username and password
and received a cookie with this session id the content of the cookie is secret and other websites cannot read it so the server will store the session
information in the database and you will only have the session id in a cookie which is stored on your computer's file system next time you request another page your
browser will automatically send a cookie containing your session id which the server will check to see if it is still valid it is essential to notice that the
second time your username and password are no longer required in order to uniquely identify you if you log out your login session will be invalidated
in the database but also the server will instruct the browser to delete the cookie containing the session id even so if the session on the server
expires the cookie becomes worthless your session will expire if you are inactive for some time the bank server will keep the session active as long as you keep interacting
with the server if for some time you are inactive and you want to visit a new page the server will notice this period of inactivity and will prompt you to
provide your username and password again as a security measure some websites like facebook for example may create a long-lived session which
means that you will rarely need to enter your login credentials however your bank may use a very short live session commonly 5 minutes or less if you are
inactive for 5 minutes you need to log in again the concept of a cookie can be hard to grasp let me make an analogy think about a cookie like your gym
membership card it stores your member id on it and when you scan it at the entry it checks if your membership is still valid and lets you in
as with your gym card a cookie with a session id only works with a specific website you cannot use your gym card to enter your office building for example and
also if your gym membership expires your card will become useless now let's go back to the login example this method is called a cookie-based
authentication accordingly this authentication used a session on the server to handle this the cookie is only the medium used to
transport the session id and it is used because it is convenient the browser will always send cookies with every request
technically speaking cookies are sent using http headers in the messages exchanged between the browser often referred to as the client and the server
http is the protocol that ensures that both the browser and the server can understand each other in this case the bank stores the session information on the server side and you
cannot see the contents of it this also ensures that you cannot manipulate any information let's talk about this real quick one of the reasons why servers don't store more
information in cookies is that they cannot be trusted as they come from the client this is a security concern it is like telling the bank i have 1 million
dollars in my bank account just trust me this is why servers prefer to work with their database where ideally only valid information exists
so to recap the session is generated by the server and will be stored in a database you as the client will only receive the id of that session often
referred to as the session id the session id is a meaningless randomly generated and hard to guess sequence of letters and numbers
cookies are used as a transport medium for the session id as browsers will automatically send any cookies associated with a website
and finally as cookies can be modified by the client the server cannot trust them and always needs to validate them traditionally cookie-based
authentication has worked very well for many years but it is slowly becoming outdated at least for some use cases let's now assume that you want to
install an app on your phone which can help you with your finances and keep track of your spending what you don't want to do is to give your username and password to this app
which is not created nor verified by your bank in this case your app will redirect you to your bank you will enter your username and
password and your bank will ask hey john would you like to give this app access to your transactions and you will check yes and the app will
receive a token granting access to your transactions this token is like a temporary password if you wish it is like when you are at a
hotel and get a one-day wi-fi password however a token is a bit more than a password most of the time it will give limited access to your data
in this case the app will only view transactions the app will not be allowed to perform money transfers or to see other details
i am sure you have seen a procedure similar to this anytime you have used facebook google or microsoft to grant access to your user profile to a third party website
so in this exchange you never expose your username and password apart from authenticating with the bank if you later want you can easily revoke
access to your account by invalidating the token which is decoupled from your account password one of the most popular protocols used
for such scenarios are oauth open id but also jwt which is pronounced jot let's take a look at how a token issued
by the bank can look like let's use json web tokens or chart tokens as an example a jot token contains more than just a
temporary password the bank may issue a token containing some important information such as the customer id the scope that this token grants when
was the token created and when does it expire one important aspect to remember is that this information is cryptographically signed
this means that it is easy to verify that the content has not been modified tampering with the content and generating a new signature is impossible
unless you are the bank the app can use this token to go to the bank and get transaction data or any kind of data that the user has granted access to
in this exchange the app does not know the password of the customer but it is still able to retrieve some data the example i have given is just one use
case of many and there are various ways on how tokens can be deployed and used so how is this token different from a session stored in a cookie
when using cookies there are only two parties involved you and the server when using tokens it is essential to notice that the interaction typically
involves multiple parties that may not trust each other so you trust your bank with your bank logging details but you may not trust this app that you have found in the app store
for these reasons tokens typically follow a standard to ensure interoperability while sessions are implemented as needed by the server without necessarily
following a standard additionally some tokens tend not to need a session on the server at all in the case of chat tokens the token
contains the session information nevertheless this is not a rule another difference is that the token has a limited lifetime and a new token needs to be generated
once it expires a token can also grant access to only a subset of the data a particular user or entity has
a traditional session based authentication will grant access to all the information available most of the time talkers are sent using
the authorization http header and not as cookies which use the cookie http header the reason for this is that nowadays many interactions happen outside of
browsers for example from apps on your phone and it simply does not make sense to use cookies for that both session-based and token-based
approaches are widespread and typically they are used in parallel for example a session based approach is deployed when using the website but a token based
approach may be preferred when using the app from the same service so it is essential to understand how both work i hope that this was useful and has helped you better understand the
difference between cookies sessions and tokens in one of the upcoming tutorials i will show you how this is implemented in practice and how you can use postman to
test such scenarios if you want to support me to make more videos like this one like and subscribe don't forget to leave a comment in the section below and i will see you next time
Loading video analysis...