// Start starts a session by generating new one // or retrieve existence one by reading session ID from HTTP request if it's valid. func (m *Manager) Start(ctx *gin.Context) (RawStore, error) { sid := ctx.GetCookie(m.opt.CookieName) if len(sid) > 0 && m.provider.Exist(sid) { return m.provider.Read(sid) } sid = m.sessionId() sess, err := m.provider.Read(sid) if err != nil { return nil, err } cookie := &http.Cookie{ Name: m.opt.CookieName, Value: sid, Path: m.opt.CookiePath, HttpOnly: true, Secure: m.opt.Secure, Domain: m.opt.Domain, } if m.opt.CookieLifeTime >= 0 { cookie.MaxAge = m.opt.CookieLifeTime } http.SetCookie(ctx.Writer, cookie) ctx.Request.AddCookie(cookie) return sess, nil }
// Destory deletes a session by given ID. func (m *Manager) Destory(ctx *gin.Context) error { sid := ctx.GetCookie(m.opt.CookieName) if len(sid) == 0 { return nil } if err := m.provider.Destory(sid); err != nil { return err } cookie := &http.Cookie{ Name: m.opt.CookieName, Path: m.opt.CookiePath, HttpOnly: true, Expires: time.Now(), MaxAge: -1, } http.SetCookie(ctx.Writer, cookie) return nil }
// RegenerateId regenerates a session store from old session ID to new one. func (m *Manager) RegenerateId(ctx *gin.Context) (sess RawStore, err error) { sid := m.sessionId() oldsid := ctx.GetCookie(m.opt.CookieName) sess, err = m.provider.Regenerate(oldsid, sid) if err != nil { return nil, err } ck := &http.Cookie{ Name: m.opt.CookieName, Value: sid, Path: m.opt.CookiePath, HttpOnly: true, Secure: m.opt.Secure, Domain: m.opt.Domain, } if m.opt.CookieLifeTime >= 0 { ck.MaxAge = m.opt.CookieLifeTime } http.SetCookie(ctx.Writer, ck) ctx.Request.AddCookie(ck) return sess, nil }