// Save adds a single session to the response. func (s *FilesystemStore) Save(r *http.Request, w http.ResponseWriter, session *Session) error { if session.ID == "" { k := securecookie.GenerateRandomKey(24) session.ID = fmt.Sprintf("%x", k) } if err := s.save(session); err != nil { return err } encoded, err := securecookie.EncodeMulti(session.Name(), session.ID, s.Codecs...) if err != nil { return err } options := s.Options if session.Options != nil { options = session.Options } cookie := &http.Cookie{ Name: session.Name(), Value: encoded, Path: options.Path, Domain: options.Domain, MaxAge: options.MaxAge, Secure: options.Secure, HttpOnly: options.HttpOnly, } http.SetCookie(w, cookie) return nil }
// Save adds a single session to the response. func (s *CookieStore) Save(r *http.Request, w http.ResponseWriter, session *Session) error { encoded, err := securecookie.EncodeMulti(session.Name(), session.Values, s.Codecs...) if err != nil { return err } options := s.Options if session.Options != nil { options = session.Options } cookie := &http.Cookie{ Name: session.Name(), Value: encoded, Path: options.Path, Domain: options.Domain, MaxAge: options.MaxAge, Secure: options.Secure, HttpOnly: options.HttpOnly, } http.SetCookie(w, cookie) return nil }
// save writes encoded session.Values to a file. func (s *FilesystemStore) save(session *Session) error { if len(session.Values) == 0 { // Don't need to write anything. return nil } encoded, err := securecookie.EncodeMulti(session.Name(), session.Values, s.Codecs...) if err != nil { return err } filename := s.path + "session_" + session.ID fileMutex.Lock() defer fileMutex.Unlock() fp, err2 := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE, 0600) if err2 != nil { return err2 } if _, err = fp.Write([]byte(encoded)); err != nil { return err } fp.Close() return nil }