iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Software Development

Laravel 隨筆學習札記系列 第 22

Day22 - HTTP Session 跟 Cookie ?

  • 分享至 

  • xImage
  •  

當我們在瀏覽器中瀏覽網站時,是否曾想過為什麼可以保持登錄狀態,並在不同頁面之間傳遞資料?這一切都歸功於 Laravel HTTP Session 的魔力!


HTTP Session 介紹

Laravel 的 HTTP Session 是一種幫助我們在多次請求之間保存使用者資訊的工具。由於 HTTP 是一種「無狀態」的協議,每次請求都是孤立的,因此需要 Session 來記住使用者的狀態,比如登入資訊或購物車內容。


功能與使用時機

那 HTTP Session 有哪些用途呢?

  • 存儲使用者資料:像是用戶名稱和購物車的內容。
  • 保持登入狀態:讓你在網站上逛來逛去而不用一直重新登入。
  • 顯示狀態消息:比如表單提交成功的提示。

Laravel HTTP Session 優缺點

那使用 HTTP Session 有什麼好處跟危險的地方勒~

好處當然是:

  • 使用簡單:Laravel 提供了一個簡潔的 API,可以輕鬆地操作 Session。
  • 安全性高:有很多加密和安全存儲選項,讓資料更安全。

需注意的部分:

  • 性能問題:如果頻繁請求可能會影響 Session 的存取速度,從而拖慢整體性能。
  • 管理複雜性:在多台伺服器環境下,要確保 Session 一致性可能需要額外配置。

Session 的生命週期 (Life Cycle Of A Session)

HTTP 協議

想像一下,作為客戶端的我們在網頁上點來點去,發出請求。然而,HTTP 是「無狀態」的,每次請求都不會記住之前的狀況。
摁!可以把 HTTP 想成是一個有短期記憶喪失的人,當你不在他面前時,他就會忘記你和之前的對話。

session 的角色

由於 HTTP 無狀態,伺服器就作為資料存儲的地方,使用「Session」來存放臨時資料。在每次登入時,伺服器會生成一個 session ID,並透過 cookie 傳回。這個 cookie 就像一張通行證,記錄一些資訊。

session ID 的重要性

session 是一個用來儲存個人資料的結構,它的有效期限不長,專門針對獨立用戶。所以如果用不同的設備登入同一個網站,這些設備就會有各自的 session ID。這樣伺服器就能管理這些資料。

安全性考量

當用戶不再使用網站一段時間後,Session 會自動過期,以提高安全性。若不這樣做,黑客可能會利用你的 session ID 來冒充你發出請求,這將帶來潛在風險。

實際應用

伺服器將 session ID 發給你,你再把它帶回去,伺服器就能根據這個 ID 找出你的資料。這種做法在購物網站的購物車功能上非常常見,伺服器可以用 Session 來保存你的暫時選擇,這樣我們就不用每次都要重新登錄。

登出功能

在登出時,必須在客戶端和伺服器兩邊都終止 Session,以防被他人劫持。如果 Session 沒有過期,則存在被盜的風險。因此,無論是對於用戶還是開發者,管理好 Session 都是至關重要的。


Cookies 跟 Session ?

我們可以想像 Session 像是一個短期的記憶體,專門存放用戶的活動信息;

而 Cookie 則是用戶瀏覽器裡的長期備忘錄。

--- Session Cookies
存儲地點 存放在 「伺服器」 的臨時記憶體,為每個用戶保留信息。 存放在用戶 「瀏覽器」 中的小便條,帶有用戶信息,每次用戶訪問網站時都會帶過來。
存在時間 僅在用戶瀏覽器開啟時有效,關閉後即消失,像短暫會議。 可以設定保存較久,甚至在關閉瀏覽器後也會保留,像長期備忘錄。
安全性 資料在伺服器上,相對安全,但仍需防範不速之客。 因為在用戶瀏覽器中,可能被他人偷窺,敏感資料不建議放在這裡。
資料容量 可以存儲大量資料,沒有大小限制。 每個 Cookie 通常限制在 4096 字節,存儲量有限。
存放內容 使用者登入狀態 / 購物車內容 / 表單數據 / 臨時設置 用戶偏好(如主題顏色)/ 記住我功能(自動登入) / 訪問計數器 / 廣告個性化

參考資料

  1. Laravel 入門— Session 及Cookie 應用與介紹
  2. Laravel官方網站:HTTP Session
  3. Life Cycle Of A Session (HTTP Session)

踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
寶劍七:寶劍七的巧妙與 Session 的運用有相似之處。Session 能夠保持用戶的登入狀態,但若管理不當,則可能導致安全漏洞或用戶資料洩漏,最終損害系統的完整性。這正體現了寶劍七所展現的投機取巧的風險:在追求短期利益時,必須警惕長期後果。

"Everyone falls down. Getting back up is how you learn how to walk."

每個人都有跌倒的時候,但重新站起來的過程,就是學會走路的旅程。

-- Walt Disney


上一篇
Day21 - 在 Laravel 世界中逐步掌握 HTTP Response 的秘密
下一篇
Day23 - 什麼時候該讓 Laravel Validation 出馬?
系列文
Laravel 隨筆學習札記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言