iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 15

Day 15 - session 和 cookie - 上集

  • 分享至 

  • xImage
  •  

為什麼我會想要寫這個題目呢?聽我娓娓道來。

相信不少人都聽過 cookie (你說餅乾嗎),尤其是現在越來越多的網站,在客戶端造訪時,會跳出「為了提升您在我們網站的使用體驗,請同意使用 Cookie」,很久以前看到這句話都直接按同意,卻沒有想過到底提升什麼體驗?也可以說,那時候不在意,只要我可以使用這個網站就好。而在某個時刻產生好奇,沒有像平時一樣直接 (無腦) 按下同意,藉著 google 大神搜尋了相關的資料,沒想到冒出一個 session 的陌生單字,儘管看了很多文件,我還是覺得這個概念很抽象。因此,我才打算寫這篇文章來紀錄一下我所理解的 session 和 cookie 機制。

我先預設一下大家都知道 HTTP 是無狀態協定,簡單來說,每次客戶端對 server 發出的請求都是獨立的,這次的請求無法得知上次請求的內容。舉個例子,唸大學的時候,我很常光顧某早餐店(因為他們家的起司蛋餅很好吃),頭幾天,老闆都會問我:「要吃什麼?」,我一如往常:「起司蛋餅和無糖豆漿」。然而有一天,老闆看到我,不是問我要吃什麼,而是問「一樣嗎?」 (不知道是生意不好,還是我真的令他印象深刻)。我想表達的是,前幾天老闆認不得我,所以每天都像新的開始,每天都會問我要吃什麼,「不認得」這件事就是沒有狀態。但是有一天卻問了一樣嗎,表示老闆記得我這個人,也記得我之前都點了什麼,「記得」這件事就是有狀態。

session

回歸這小節要講的是 session,代表的是一個「狀態」,是一種讓請求變成 stateful 的機制。一個實際應用就是購物車。比方說現在加入購物車的東西打算要結帳了,卻發現有個東西沒有買到,跳回剛剛的頁面繼續買其他東西,再回到購物車時,購物車不會被清空。

那要怎麼實作 session 呢?

  1. 一種方式就是塞在網址列中,假設小明在pchome.com.tw上打算購買一台電腦,和一個滑鼠,當他點擊加入購物車的瞬間,瀏覽器送了一個請求到 server,網址就會變成pchome.com.tw/product1=computer&product2=mouse。最後按下送出訂單時,server 就可以抓取到網址上的資訊來得知目前的狀態為何,也就可以判斷小明的購物車買了什麼。
  2. 另外一種方式就是接下來要介紹的cookie。

參考資料:
白話 Session 與 Cookie:從經營雜貨店開始
麥克的半路出家筆記

學無止盡,每天都要進步一點點!


上一篇
Day 14 - View 幫你包裝美美外殼
下一篇
Day 16 - session 和 cookie - 下集
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言