你有沒有想過使用網站時,明明才剛登入,但重整網頁後竟然不用重新輸入密碼?這背後其實全靠網頁界的「記憶大師」在默默協助!很多人或許聽過 Session 與 Session cookie,但總是把這兩者搞混,甚至以為它們是同一種東西,但請別擔心,今天就讓本文用最直白的方式,帶你一次看懂什麼是 Session,以及它跟 Cookie 的差別到底在哪裡!
Session 是什麼?把網站變成「有記憶力」的幕後功臣
既然知道網站和瀏覽器之間需要建立連結,那首先要介紹的主角就是「Session」了,到底這個常常出現在工程師口中,聽起來有點神祕的名詞,在網頁世界裡扮演著什麼角色?它又是怎麼幫網站記住事情的呢?
透過簡單比喻認識什麼是 Session
網頁的「Session」是伺服器端用來「記錄特定使用者狀態」的一種機制,如果把上網比喻成去遊樂園玩,網站伺服器就像是遊樂園,而你在瀏覽器上的使用行為就像是遊客,而由於遊樂園每天要接待成千上萬的遊客,門票檢查員不可能記住每個人的臉。
於是當你購票入園時,工作人員會在你的手上戴上一個「特製手環(Session ID)」,這樣做之後,接下來不管是去玩雲霄飛車還是旋轉木馬,你只要揮揮手環,工作人員就知道「喔!你是買了全日票的 VIP 張遊客」,不需要每次都掏出身份證重新驗證。
Session 的三大核心特性
在網頁世界裡也是一樣,當你成功登入某個網站,伺服器就會在後臺為你建立一個專屬的 Session 檔案,並給你一個獨一無二的 Session ID,只要你的瀏覽器拿著這個識別證來發出請求,網站就能立刻知道「這是你」,但 Session ID 雖然好用,在使用特性上仍有三大特性需要注意:
資料儲存在「伺服器端」:這是它最重要特點,所有關於你的敏感資料,例如帳號、購物車內容等,都是安全的鎖在遠端的伺服器裡,你的瀏覽器只會拿到一串沒有意義的識別證號碼,因此安全性相對較高。
具有時效性:Session 不是永久的,為了不佔用伺服器記憶體,也為了資安著想,當你關閉瀏覽器,或者在網站上發呆太久沒有任何操作,這個 Session 就會自動失效,這就是為什麼你一段時間沒動網頁,系統會提示「登入已逾時,請重新登入」的原因。
瀏覽器獨立限制:每一個瀏覽器視窗或分頁,與伺服器之間建立的 Session 通常是獨立的,如果你用 Chrome 登入了帳號,另外開啟 Safari 瀏覽器時,Safari 是不會共享同一個 Session 的。
Session 跟 Cookie 有一樣嗎?一張表帶你了解
既然 Session 這麼萬能,可以把資料牢牢鎖在伺服器端,那為什麼我們在上網時,還是一天到晚看到「請允許 Cookie 隱私權條款」呢?這兩者到底是不是同一個東西?其實它們就像是網頁世界裡的左右護法,雖然功能都是為了幫網站建立記憶,但運作邏輯卻完全不同。
Cookie-瀏覽器專屬的「記事本」
延續上一段遊樂園的例子來說,如果說 Session 是遊樂園發給你的專屬手環,那 Cookie 就像是飯店發給你的「集點卡」或「房卡」,這張卡片是放在你自己的皮夾(瀏覽器)裡,每次你回到這家飯店,你得自己把卡片掏出來給櫃檯看,櫃檯才會知道「原來你上次來住過、還累積了 3 點。」
Cookie 的兩大主要功能
Cookie 的主要功能,其一是記住個人化設定,像是你切換的「深色模式」、偏好的語系,或者是網頁字體大小等,另一個則是追蹤使用者行為,記錄你點擊了哪些商品、瀏覽了哪些頁面,這也是為什麼廣告商能精準對你投放「你剛剛才看過的網購外套」的原因,也就是常聽到的「廣告追蹤」。
利用表格認識 Session 與 Cookie 差別在哪
| 比較項目 | Session | Cookie |
|---|---|---|
| 資料存放位置 | 伺服器端,安全性高,像鎖在銀行保險箱 | 瀏覽器端 / 客戶端,存在使用者電腦,容易被查看或修改 |
| 資料儲存限制 | 基本取決於伺服器的記憶體大小 | 限制嚴格,每個檔案通常不能超過 4KB,數量也有限制 |
| 使用生命週期 | 通常較短,關閉瀏覽器或閒置過久逾時,就會自動消失 | 可長可短,可以設定明確的過期時間,例如記住帳密 30 天,就算關網頁也還在 |
| 伺服器負擔 | 較高,因為資料都存在伺服器,人數暴增時會佔用主機資源 | 極低,資料隨瀏覽器攜帶,不佔用伺服器儲存空間 |
Session 與 Cookie 的運作原理與安全性可靠嗎?
看完 Session 是存在在伺服器內,而 Cookie 是留在瀏覽器的隨身記事本後,那為什麼有些網站可能點一下連結,就會被駭客盜用帳號?這就牽涉到它們的運作機制與安全防禦了:
當你點開網頁時,後臺發生了什麼事?
要搞懂它們的運作原理,我們可以直接拆解成「使用者登入網站」的 4 個步驟解說:
步驟一:瀏覽器發送請求
你在登入頁面輸入了帳號密碼,按下登入,此時瀏覽器把這對帳密發送給伺服器。
步驟二:伺服器建立 Session
伺服器檢查發現帳密正確,於是在自己的記憶體伺服器端,開闢了一個專屬空間,這就是 Session,用來存放你的會員資料,同時伺服器還會隨機生成一組獨一無二的「Session ID」。
步驟三:核發識別證
伺服器把這組 Session ID 塞進 Response 回應的標頭裡,像發放識別證一樣丟回給瀏覽器。
步驟四:瀏覽器存入 Cookie
瀏覽器收到 Session ID 後,會默默地把它存放在 Session Cookie 當中,接著只要你每點擊一個新分頁發送新請求,瀏覽器就會自動帶著這個 Session Cookie 去找伺服器,伺服器對照一下 ID 一致,就讓你繼續保持登入狀態。
防範駭客的關鍵解析
了解完運作原理後,那安全性的部分,兩者又是如何防禦的呢?
Cookie 的安全性
由於 Cookie 是實實在在儲存在你的電腦或手機硬碟裡,這意味著它在先天上就很容易被看光光,只要稍微懂一點網頁檢視技術的人,都能輕易從瀏覽器的後臺翻出你的 Cookie 內容,如果網站開發者大意地把使用者的密碼、敏感個資,直接存在 Cookie 裡,那簡直就像是把自家大門鑰匙直接貼在門口一樣危險。
正因為這個特性,現在的網頁開發者絕對不會把重要資料存在 Cookie 中,若想要進一步提升它的安全防護,通常會為 Cookie 加上 HttpOnly 標籤來防止 JavaScript 惡意程式偷取,或是加上 Secure 標籤,強制這組 Cookie 只能在受到 HTTPS 加密連線的保護下進行傳輸。
Session 的安全性
相比之下,Session 的安全性就高出許多,因為所有重要的隱私資料,不論是使用者的權限、購物金額還是會員個資,通通都好好地鎖在遠端的伺服器端,使用者或外部駭客根本摸不到、也無法任意修改,不過這並不代表 Session 就完全天下太平,別忘了瀏覽器手上還握有一張名為 Session Cookie 的識別證,也就是那組用來對應保險箱的 Session ID。
如果駭客利用跨網站指令碼(XSS)等惡意攻擊,不小心偷走了這張識別證,駭客就能在不用輸入密碼的情況下,直接假冒你的身份登入網站,這在網路世界中被稱為「Session 劫持」。為了防止這種風險,工程師通常會設定嚴格的過期逾時機制,甚至在偵測到使用者更換 IP 與設備時,強制讓原本的 Session ID 失效,確保整體安全萬無一失。
關於 Session 與 Cookie 的 FAQ 解析
Q1:如果我在瀏覽器中停用、拒絕所有 Cookie,網站還能用嗎?
網站可以打開,但大部分的「會員功能」會直接殘廢,Session 的運作非常依賴瀏覽器端手上的 Session cookie 來當作識別證,如果你把瀏覽器的 Cookie 功能完全關閉,伺服器就沒辦法把 Session ID 發送給你,這會導致你每點擊一次重新整理、換到下一個分頁,網站就會瞬間忘記你是誰,逼得你得不斷重新輸入帳號密碼,甚至連購物車都無法順利加入商品。
Q2:我們常在登入時勾選「保持登入 30 天」,這背後是用 Session 還是 Cookie 做的?
這是利用「具備長期時效的 Cookie」來達成的,一般用來維持當次瀏覽狀態的 Session Cookie,通常只要瀏覽器一關閉就會自動消失,而 Session 在伺服器端的生命週期也往往只有幾十分鐘,如果你勾選了「記住我 30 天」,伺服器就會在你的瀏覽器裡埋下一組「壽命極長」且經過加密的「Persistent Cookie(持久性 Cookie)」。
Q3:既然 Session 把資料存放在伺服器比較安全,為什麼不乾脆把所有資料都用 Session 存就好?
因為這會讓伺服器的荷包和記憶體直接爆炸!Session 的儲存空間是直接佔用伺服器的記憶體和資料庫資源,假設如果今天一個網站同時有 10 萬人在線,而你把每個人的購物紀錄、看過的商品清單,甚至詳細個資通通塞進 Session 裡,伺服器的記憶體很快就會被吃光,導致整個網站變得卡頓甚至直接當機。
Q4:Session 劫持(Session Hijacking)是什麼?該如何防範?
Session 劫持是指駭客透過 XSS 等攻擊手法竊取使用者的 Session ID,進而假冒身份登入網站。防範方式包括:為 Cookie 加上 HttpOnly 與 Secure 標籤、設定嚴格的 Session 逾時時間,以及在偵測到 IP 或裝置異常時強制讓原有 Session ID 立即失效。
Q5:Cookie 的 HttpOnly 和 Secure 標籤分別是在防什麼?
HttpOnly 標籤可阻止 JavaScript 程式讀取 Cookie 內容,有效防止 XSS 惡意指令碼竊取 Session ID;Secure 標籤則強制 Cookie 只能在 HTTPS 加密連線下傳輸,防止資料在網路傳輸途中被中間人截取。兩者建議同時啟用以加強防護。
Session 負責在伺服器端守護重要個資,而 Session Cookie 則在瀏覽器端當作通關識別證,兩者各司其職,才讓我們日常上網既方便又安全,在開發網站或推動數位轉型時,如何完美設定這些底層機制,兼顧「使用者體驗」與「資安防護」,是每個品牌不容忽視的課題,如果你希望打造出兼具高規格安全與流暢體驗的企業網站,那也不妨考慮交給專業的鉅潞科技團隊!
