Cookie and Session

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

Cookie 的誕生

若先從一個最為陽春的網路溝通方式來看,當一個 Client 端和一個 Server 端發送請求,並由 Server 端處理後進行響應,這一整個過程會因為 http 的無狀態特性,不著痕跡也不留紀錄。問題在於,多數時候留些有用的東西比較好。

假設今天我們透過帳號密碼登入,進到了某個平台服務的會員個人頁面,而這些會員頁面如果沒有登入是無法訪問到的。換句話說,如果在過程中什麼都沒存的話,勢必每一次訪問不同的會員頁面,都需要輸入一次帳號密碼來驗證身分,那想必十分破壞用戶體驗。

Cookie 的概念正是為了要解決這問題而誕生的,在 Client 端第一次發送請求至 Server 端時,Server 端在處理過程中便生成一個標示,也就是 Cookie。這 Cookie 中存了些需要的資料,並且包裝好連同響應一起回覆給 Client 端,讓他在下次發送請求時,可以不用重複麻煩的輸入流程,就可以發送帶有必備資料的請求。

而這些存在於 Client 端的 Cookie 也是會有期限的,若無特別設置的話,Cookie 會在 Client 端瀏覽器被關閉的時刻慘遭清除。若特別去設定,則可以使其持久化,在 Golang 中可以這麼設定他:

避免鬼打牆,我先表明有 import "time" 和 "net/http" 兩個包~!line 3 的部分我設定期限為三天後,line 4 描述了 Cookie 中所需內容,並在 line 5 完成 Cookie 的設置。


Session 的誕生

Cookie 的出現固然解決了大半問題,但仍有些缺陷,比如說她是個存在於客戶端的文件資料,很容易在 Client 端被拿來動手腳的。再者,Cookie 中若包含著機密的資料像是帳號密碼等等,每次發送請求都跟著出去一次,那被攔截或竊聽的風險可就大大提高了。因此便有了 Session 誕生的理由。

同樣是在 Client 端與 Server 端進行首次溝通 hand shaking 時,Server 端生成了一個 Session,可以把它視為一種維持兩端溝通的方案,並存於 Server 端。同時會生成一把與 Session 相對應的鑰匙,也就是 session id,並隨著響應回復至 Client 端。

Session 建立完成後,接下來的溝通 Client 端發送請求時便會帶上這串 session id,送達 Server 端時便會開始查找對應的 Session 以繼續進行溝通。此方法雖可有效提高安全性,但是當多個 Session 囤積在 Server 端時光是想就覺得不對勁,所以仍是要做出適當的抉擇。


使用 Session 就一定可靠嗎?

想想 Cookie 的問題出在哪裡,便可以知道 Session 也有同樣問題,只是不那麼明顯。對於儲存資料的 Cookie ,一旦被有心人士取得其中資料便會發生問題,而 Session id 同理,只不過要再帶上他發送請求給 Server 端進行類似盜用詐欺的行為而已。Session 仍是有風險存在的,那該怎麼辦?

Cookieonly

其中一個方法便是強制 Session id 僅能由 Cookie 在發送請求時帶上,而無法透過 url 引數的方式帶上。同時降 Cookie 設置為 httponly,使其僅能在 http 溝通時被訪問,避免被從其他管道惡意讀取。

Token

另外也可以在每次 Client 端發送請求時,附上一組隨機生成的 Token,並在 Server 端進行重複性驗證,以確保請求的唯一性。

Refresh Session id

每隔一段時間就重新生成一組 Session id 也是個可能的方法,如此ㄧ來便會提高第三方竊取的成本,並增加捕捉到惡意行為的機會。


Ref

https://github.com/astaxie/build-web-application-with-golang

留言
avatar-img
留言分享你的想法!
avatar-img
Rain Wu的沙龍
4會員
8內容數
一個初入 Golang 世界的菜鳥,希望能透過筆記的方式幫助自己釐清問題。
Rain Wu的沙龍的其他內容
2020/10/31
自春季末開始求職以來,大約也經過了半年,期間陸續接觸了近十間軟體企業,拓展了不少眼界。依循著前人「取之於社群,回饋於社群」的精神,我也希望能為產業貢獻一己之力,以一個求職者的視角,分享我親身體驗的軟體企業面試現況。
Thumbnail
2020/10/31
自春季末開始求職以來,大約也經過了半年,期間陸續接觸了近十間軟體企業,拓展了不少眼界。依循著前人「取之於社群,回饋於社群」的精神,我也希望能為產業貢獻一己之力,以一個求職者的視角,分享我親身體驗的軟體企業面試現況。
Thumbnail
2020/06/12
為何掌握了關鍵市場關鍵需求,也就是擁有開發及設計能力的學生們,在談判上會這麼的弱勢呢?照理來說,壟斷關鍵因素應該就能緊扼賽局脈搏,這讓我不禁開始思考這情況下的談判力悖論,以及該如何解開不利的局面。
Thumbnail
2020/06/12
為何掌握了關鍵市場關鍵需求,也就是擁有開發及設計能力的學生們,在談判上會這麼的弱勢呢?照理來說,壟斷關鍵因素應該就能緊扼賽局脈搏,這讓我不禁開始思考這情況下的談判力悖論,以及該如何解開不利的局面。
Thumbnail
2020/05/16
在我還是大一的時候,我接觸了第一個知識性文章寫作平台 Medium,記得那時候在同溫層內挺熱門的,我也被平台上的文章品質深深的吸引,開啟了我閱讀網路文章的興趣。 最一開始是從我的每日通勤時間開始改變,以單程 25 分鐘的火車來說,大約能轉換成 3 ~ 4 篇文章的閱讀。考慮來回的話,我一週平日的總
Thumbnail
2020/05/16
在我還是大一的時候,我接觸了第一個知識性文章寫作平台 Medium,記得那時候在同溫層內挺熱門的,我也被平台上的文章品質深深的吸引,開啟了我閱讀網路文章的興趣。 最一開始是從我的每日通勤時間開始改變,以單程 25 分鐘的火車來說,大約能轉換成 3 ~ 4 篇文章的閱讀。考慮來回的話,我一週平日的總
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
之前在 學習筆記 | 關於 Cookie、Session、Token 這篇筆記有提到,瀏覽器需要帶著使用者的身分訊息或經過身分驗證後取得的Token(令牌),才能向伺服器請求資源,那麼瀏覽器就必須有個空間來儲存這些 Token 資訊,這篇就是要來記錄瀏覽器常見的儲存空間啦~
Thumbnail
之前在 學習筆記 | 關於 Cookie、Session、Token 這篇筆記有提到,瀏覽器需要帶著使用者的身分訊息或經過身分驗證後取得的Token(令牌),才能向伺服器請求資源,那麼瀏覽器就必須有個空間來儲存這些 Token 資訊,這篇就是要來記錄瀏覽器常見的儲存空間啦~
Thumbnail
HTTP通訊協定不會持續保持連線和保留客戶端的使用者狀態,因此需要將使用者狀態傳遞下去,以便保留使用者狀態,稱為「狀態管理」(State Management)。 客戶端: 此部份是將資料存在使用者電腦或HTML網頁或標籤中,以便傳遞。常用方法如下: 表單欄位:使用HTML表單欄位內容傳遞資料
Thumbnail
HTTP通訊協定不會持續保持連線和保留客戶端的使用者狀態,因此需要將使用者狀態傳遞下去,以便保留使用者狀態,稱為「狀態管理」(State Management)。 客戶端: 此部份是將資料存在使用者電腦或HTML網頁或標籤中,以便傳遞。常用方法如下: 表單欄位:使用HTML表單欄位內容傳遞資料
Thumbnail
如果您以為上一篇 已經是所有需要考慮的眉角,那可就錯了,實作 offline first 不是只有 client 要注意,server 也需要下功夫的。
Thumbnail
如果您以為上一篇 已經是所有需要考慮的眉角,那可就錯了,實作 offline first 不是只有 client 要注意,server 也需要下功夫的。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
今天來聊聊我們常常使用的網頁,背後怎麼讓我們用的更順暢的一門傳輸方式,HTTP Keep-Alive,透過一點點的小改變,讓傳輸效率提升,減少非必要的浪費。 當我們溝通的過程中沒有KeepAlive的狀況下,會有多次往來的狀況,這樣對雙方來說開銷成本是非常大的,因此為了改善這個現象,加入了一個機制,
Thumbnail
今天來聊聊我們常常使用的網頁,背後怎麼讓我們用的更順暢的一門傳輸方式,HTTP Keep-Alive,透過一點點的小改變,讓傳輸效率提升,減少非必要的浪費。 當我們溝通的過程中沒有KeepAlive的狀況下,會有多次往來的狀況,這樣對雙方來說開銷成本是非常大的,因此為了改善這個現象,加入了一個機制,
Thumbnail
What is WebSocket? WebSocket 是 HTML5 提供的一種網路傳輸協定,是瀏覽器(Client)與伺服器(Server)交換資料的方式之一。 與我們較為熟知的 HTTP 或 HTTPS 協定,同樣位於 OSI 模型的應用層,且基於傳輸層的 TCP 協定。
Thumbnail
What is WebSocket? WebSocket 是 HTML5 提供的一種網路傳輸協定,是瀏覽器(Client)與伺服器(Server)交換資料的方式之一。 與我們較為熟知的 HTTP 或 HTTPS 協定,同樣位於 OSI 模型的應用層,且基於傳輸層的 TCP 協定。
Thumbnail
前言 在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Falsk session的運作機制做些簡單的紀錄。 何謂Flask
Thumbnail
前言 在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Falsk session的運作機制做些簡單的紀錄。 何謂Flask
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News