[Go] Gorilla Sessions
在開發網站的時候,有時候也會用到 sessions 來記錄狀態。 在這裡我們可以使用 github.com/gorilla/sessions
套件來輕鬆管理 sessions。
說明
github.com/gorilla/sessions
提供兩種 session 管理的方式。
- 將 session 存在 server 的方式。
- 將 session 跟著加密的 cookie 存放在 client side 的方式。
今天會介紹第 2 種方式,第 2 種方式的優點是 server 端不用管理 session 的狀態, server 就算重開,session 也會存在,不用擔心消失。 但是缺點也是有的,因為 session 是跟著 cookie stores 走的,所以當資料量大的時候,這種方式是不適合的,以現在 chrome 來說,就有限制 4096 bytes 的大小。
其他詳細優缺點說明可以參考 Cookie Store Sessions
範例
下面的程式碼我實做了三個頁面
/home
存取頁面,要登入才會顯示正確訊息/login
模擬登入頁面,存入 session/logout
模擬登出頁面,把狀態修改成未登入
- go
1 | package main |
上面程式碼執行後,當存取 /home
的時候會看到,會看到沒有權限。
所以我們先模擬登入login
,登入之後,會看到有一個 Cookie Store Sessions 被建立了,且該 cookie 是加密過後的。
這時候再存取 /home
就可以看到有權限的畫面了。
小結
最後要注意,session 也要加入過期時間,否則認證會一直有效。或者是可以設定 store.MaxAge() 設定 cookie 存在時間,時間到了 cookie 會自行刪除。 以及,如果要做 session key 的 rotation,可以參考 sessions#NewCookieStore