> 在Gin框架中,我們可以依賴gin-contrib/sessions中間件處理session,該中間件支持cookie、memstore、redis、memcached、mongodb等存儲引擎
[TOC]
## 安裝session包
~~~
go get github.com/gin-contrib/sessions
~~~
## 基于cookie存儲的session
~~~
package main
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 創建基于cookie的存儲引擎,my_secret_Yx16-12SaA 參數是用于加密的密鑰
store := cookie.NewStore([]byte("my_secret_Yx16-12SaA"))
// 設置session中間件,參數mysession,指的是session的名字,也是cookie的名字
// store是前面創建的存儲引擎,我們可以替換成其他存儲引擎
r.Use(sessions.Sessions("mysession", store))
r.GET("/hello", func(c *gin.Context) {
// 初始化session對象
session := sessions.Default(c)
// 通過session.Get讀取session值
if session.Get("hello") != "world" {
// 設置session
session.Set("hello", "world")
// 刪除session
session.Delete("newkey")
// 保存session
session.Save()
// 刪除整個session
// session.Clear()
}
c.JSON(200, gin.H{"hello": session.Get("hello")})
})
r.Run(":8080")
}
~~~
## 基于redis存儲的session
**安裝redis存儲引擎包**
~~~
go get github.com/gin-contrib/sessions/redis
~~~
**例子:**
~~~
package main
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/redis"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 初始化基于redis的存儲引擎
// 參數說明:
// 第1個參數 - redis最大的空閑連接數
// 第2個參數 - 數通信協議tcp或者udp
// 第3個參數 - redis地址, 格式,host:port
// 第4個參數 - redis密碼
// 第5個參數 - session加密密鑰
store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
r.Use(sessions.Sessions("mysession", store))
r.GET("/incr", func(c *gin.Context) {
session := sessions.Default(c)
var count int
v := session.Get("count")
if v == nil {
count = 0
} else {
count = v.(int)
count++
}
session.Set("count", count)
session.Save()
c.JSON(200, gin.H{"count": count})
})
r.Run(":8000")
}
~~~
- 基礎知識
- 開發環境
- 包名規則
- 包初始化 (init)
- 基礎數據類型
- 基礎類型轉換
- 格式化輸出
- go指針
- 流程控制語句
- 函數定義
- 匿名函數
- 數組和切片
- map集合
- 結構體
- Interface接口
- 日期處理
- 數學計算
- 正則表達式
- 協程 (并發處理)
- channel
- waitgroup
- mutex (鎖機制)
- websocket
- protobuf
- Redis
- 錯誤處理
- 打包程序
- NSQ消息隊列
- 單元測試
- beego
- 安裝入門
- Gin
- 快速入門
- 路由與控制器
- 處理請求參數
- 表單驗證
- 處理響應結果
- 渲染HTML模版
- 訪問靜態文件
- Gin中間件
- Cookie處理
- Session處理
- Gin上傳文件
- swagger
- pprof性能測試
- GORM
- 入門教程
- 模型定義
- 數據庫連接
- 插入數據
- 查詢數據
- 更新數據
- 刪除數據
- 事務處理
- 關聯查詢
- 屬于 (BELONG TO)
- 一對一 (Has One)
- 一對多 (Has Many)
- 多對多 (Many to Many)
- 預加載 (Preloading)
- 錯誤處理
- 第三方常用插件
- viper 讀取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷鍵