代码拉取完成,页面将自动刷新
同步操作将从 dxvgef/sessions 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
使用golang实现的Sessions功能包,仅支持Redis存储,Redis的驱动包使用的是go-redis/redis,已实现以下功能:
此示例的HTTP框架使用的是Tsing,也可以和更多框架整合
package main
import (
"log"
"net/http"
"time"
"github.com/dxvgef/tsing"
"github.com/dxvgef/sessions"
)
// 定义session管理器
var sessManager sessions.SessionManager
func main() {
log.SetFlags(log.Lshortfile)
// 设置session管理器
err := setSessManager()
if err != nil {
log.Fatalln(err.Error())
}
app := tsing.New()
// 定义一个路由处理器用于写入session
app.Router.GET("/", func(ctx tsing.Context) error {
// 启用session
session, err := sessManager.UseSession(ctx.Request, ctx.ResponseWriter)
if err != nil {
log.Println(err.Error())
return err
}
// 写入值
err = session.Set("test", "ok")
return err
})
// 定义一个路由处理器用于演示sessions的其它操作
app.Router.GET("/test", func(ctx tsing.Context) error {
// 启用session
session, err := sessManager.UseSession(ctx.Request, ctx.ResponseWriter)
if err != nil {
log.Println(err.Error())
return err
}
// 读取string类型的值
var value string
value, err = session.Get("test").String()
if err != nil {
log.Println(err.Error())
return err
}
ctx.ResponseWriter.WriteHeader(200)
ctx.ResponseWriter.Write([]byte(value))
// 删除指定key的数据
err = session.Delete("test")
if err != nil {
log.Println(err.Error())
return err
}
// 清除session数据但不删除cookie中的sessionID
err = session.ClearData()
if err != nil {
log.Println(err.Error())
return err
}
// 清除session数据以及cookie中的sessionID
// 下次请求时会重新生成新的sessionID
err = sessManager.ClearAll(ctx.Request, ctx.ResponseWriter)
if err != nil {
log.Println(err.Error())
return err
}
return nil
})
// 启动HTTP服务
if err := http.ListenAndServe(":8080", app); err != nil {
log.Fatal(err.Error())
}
}
// 设置sessionManager
func setSessManager() error {
var err error
// 创建session管理器
sessManager, err = sessions.NewSessions(sessions.Config{
CookieName: "sessionid", // cookie中的sessionID名称
HttpOnly: true, // 仅允许HTTP读取,js无法读取
Domain: "", // 作用域名,留空则自动获取当前域名
Path: "/", // 作用路径
MaxAge: 60 * 60, // 最大生命周期(秒)
IdleTime: 20 * time.Minute, // 空闲超时时间
Secure: false, // 启用HTTPS
DisableAutoUpdateIdleTime: false, // 禁止自动更新空闲时间
RedisAddr: "127.0.0.1:32771", // Redis地址
RedisDB: 0, // Redis数据库
RedisPassword: "", // Redis密码
RedisKeyPrefix: "sess", // Redis中的键名前缀,必须
Key: "abcdefghijklmnop", // 用于加密sessionID的密钥,密钥的长度16,24,32对应AES-128,AES-192,AES-256算法
})
if err != nil {
return err
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。