學習筆記 | 關於 Cookie、Session、Token

更新於 發佈於 閱讀時間約 3 分鐘

延續先前的筆記,「網路請求」是瀏覽器和伺服器的溝通橋梁,目的是為了取得資料庫內的資源,除了 CORS 這種瀏覽器本身的阻擋機制,伺服器也會需要進行「身分驗證或授權」這道阻擋,並不是使用者有帶上 header 告知身分,就一定可以把資料 response 回來的。

像是最常見的會員資料,伺服器就必須確認你是會員本人,才會將你的訂單資訊、歷史訂單...等內容回傳過來,所以我們需要進行「登入」,告知伺服器:我就是會員本人啦

一般常見的身分驗證方式有以下三種:

  1. 使用者應該知道的資訊 ex:密碼
  2. 使用者持有的證件、憑證 ex:身分證、Token
  3. 使用者的身體特徵 ex:指紋

很顯然的,一般我們使用的會員登入,驗證的是「使用者應該知道的資訊」,但總不能每次要查看購物車內的商品或歷史訂單,就要重新進行驗證吧,所以登入以後的請求,就會改用「使用者持有的證件」,也就是 Token 這項令牌了

我聽過一句話,「技術的發明,是為了解決問題」,所以了解 Token 以前,也需要知道它為什麼而誕生吧?

這就需要從身分驗證的狀態來說了,先定義一下此時的「狀態」所代表的意思是:

  • 有狀態 ➜ 表示會保存關於使用者的信息、具有記憶性,能夠追蹤使用者的活動
  • 無狀態 ➜ 表示對處理過的事件並沒有記憶性,每個請求都是獨立的,因此也無法辨識這次的請求和上次的請求是否為同一個人


最初瀏覽器和伺服器驗證身分後,是透過瀏覽器的 Cookie 紀錄使用者的狀態,並在後續訪問資料時,帶著 Cookie 儲存的狀態去進行請求

raw-image

此時 Cookie 有很致命的問題是

1. 資料透明 ➜ 透明意味著完全公開,沒有任何加密動作,存在安全性問題

2. 網域限制 ➜ 無法跨網域共用 Cookie 所儲存的狀態訊息


因此開發者們轉而使用 Session 來記錄使用者狀態,Session 的存取方式基本上與 Cookie 相同,但狀態存取方改變為「伺服器」了

raw-image

伺服器會將使用者狀態打包成一個 ID,並將這個 ID 回傳給瀏覽器,瀏覽器要訪問後續資源時,就帶這個 ID 進行驗證,解決了 Cookie 資料透明和只能存取字串的問題


然而 Session 也有存在其他的問題

1. 只要瀏覽器關閉就會失效

  1. 狀態由伺服器存取,假設每次訪問到的伺服器不同,則伺服器之間又需要互相索取資料,消耗效能


因此 Token 就誕生啦!

raw-image

Session 已經解決資料裸奔的問題, Token 要解決的則是「無狀態」的身分驗證問題


Token 會在使用者進行身分驗證後,由伺服器將使用者狀態打包加密,再傳送給瀏覽器,成為一種瀏覽器向伺服器訪問資料時的通行證,也可以稱為金鑰或令牌


此時伺服器不再需要保留使用者狀態,只要確認 Token 的時效性,就可以進行身分驗證,也可以進行跨域的請求啦!就相當於去遊樂園,只要持有一日票券的使用者,都可以使用遊樂設施,是認票不認人的~



本篇筆記參考 深入解析 JWT:了解 Token 的運作與應用 整理而成

我是Amber,前端學習中,歡迎交流討論🧸

avatar-img
23會員
22內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Amber hh的沙龍 的其他內容
那麼「我要什麼資料」就需要告訴伺服器特定的內容啦,舉例來說: 我要登入,就必須把「帳號」和「密碼」一起帶在請求內,發送給後端進行驗證
上篇記錄了關於 HTTP request 的筆記,這篇則是對於請求的回應紀錄~
上一篇【瀏覽器與伺服器是如何溝通的?】有說瀏覽器和伺服器的溝通橋樑是「網路請求」,這篇就來記錄一下,我目前學習到的網路請求是什麼~
身為一個非本科新手工程師,對於網路知識還是有許多疑惑之處,像是我在編輯器上寫了數十行的程式碼,那它們是怎麼透過終端機的指令被運行起來,讓我可以一邊開發一邊預覽結果呢?
時間真的過得好快,從2022五月的體驗營開始,到後來的切版直播班、JS直播班,將近一年的時間,現在都要從Vue直播班畢業了!
事情是這樣發生的,由於直播班第二週和第三週的作業內容很相似,於是我就把第二週的作業資料夾「複製」了一份,作為第三週的基底,並把第三週的作業內容完成後,準備上傳到一個新建的 week3 遠端 repository ...
那麼「我要什麼資料」就需要告訴伺服器特定的內容啦,舉例來說: 我要登入,就必須把「帳號」和「密碼」一起帶在請求內,發送給後端進行驗證
上篇記錄了關於 HTTP request 的筆記,這篇則是對於請求的回應紀錄~
上一篇【瀏覽器與伺服器是如何溝通的?】有說瀏覽器和伺服器的溝通橋樑是「網路請求」,這篇就來記錄一下,我目前學習到的網路請求是什麼~
身為一個非本科新手工程師,對於網路知識還是有許多疑惑之處,像是我在編輯器上寫了數十行的程式碼,那它們是怎麼透過終端機的指令被運行起來,讓我可以一邊開發一邊預覽結果呢?
時間真的過得好快,從2022五月的體驗營開始,到後來的切版直播班、JS直播班,將近一年的時間,現在都要從Vue直播班畢業了!
事情是這樣發生的,由於直播班第二週和第三週的作業內容很相似,於是我就把第二週的作業資料夾「複製」了一份,作為第三週的基底,並把第三週的作業內容完成後,準備上傳到一個新建的 week3 遠端 repository ...
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
今天寫文章來學習什麼是「第一方 Cookies」。 ## 1. Cookie在LinkedIn廣告中的角色 根據Linkedin的文章[1], Cookie 是被設置在網站訪問者的 Web瀏覽器上, 可以幫助 Linkedin 確定廣告被展示給哪些成員, 是衡量廣告效果,改
(1) 收集用戶名單,例如 Email 和手機,未來可做廣告受眾再行銷,例如 FB 廣告、GDN 廣告、Email發送。 (2) 在網站追蹤中,用 GTM 實施「增強型轉換」,讓每一個轉換數據發送時都帶有第一方數據,能讓轉換追蹤更精準,減少受 Cookie 政策的影響。 (3)
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
在串接第三方 API時,需要定期刷新 token,那有沒有辦法針對 request 和 response 做配置,在 token 過期時先做刷新、再做請求呢?本文要介紹利用 axios 套件提供的攔截器刷新 token 的作法。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
今天寫文章來學習什麼是「第一方 Cookies」。 ## 1. Cookie在LinkedIn廣告中的角色 根據Linkedin的文章[1], Cookie 是被設置在網站訪問者的 Web瀏覽器上, 可以幫助 Linkedin 確定廣告被展示給哪些成員, 是衡量廣告效果,改
(1) 收集用戶名單,例如 Email 和手機,未來可做廣告受眾再行銷,例如 FB 廣告、GDN 廣告、Email發送。 (2) 在網站追蹤中,用 GTM 實施「增強型轉換」,讓每一個轉換數據發送時都帶有第一方數據,能讓轉換追蹤更精準,減少受 Cookie 政策的影響。 (3)
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
在串接第三方 API時,需要定期刷新 token,那有沒有辦法針對 request 和 response 做配置,在 token 過期時先做刷新、再做請求呢?本文要介紹利用 axios 套件提供的攔截器刷新 token 的作法。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊