// Regenerate regenerates a session store from old session ID to new one. func (p *NodbProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err error) { if p.Exist(sid) { return nil, fmt.Errorf("new sid '%s' already exists", sid) } kvs := make([]byte, 0) if p.Exist(oldsid) { if kvs, err = p.c.Get([]byte(oldsid)); err != nil { return nil, err } else if _, err = p.c.Del([]byte(oldsid)); err != nil { return nil, err } } if err = p.c.Set([]byte(sid), kvs); err != nil { return nil, err } else if _, err = p.c.Expire([]byte(sid), p.expire); err != nil { return nil, err } var kv map[interface{}]interface{} if len(kvs) == 0 { kv = make(map[interface{}]interface{}) } else { kv, err = session.DecodeGob([]byte(kvs)) if err != nil { return nil, err } } return NewNodbStore(p.c, sid, p.expire, kv), nil }
// Regenerate regenerates a session store from old session ID to new one. func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err error) { if p.Exist(sid) { return nil, fmt.Errorf("new sid '%s' already exists", sid) } else if !p.Exist(oldsid) { // Make a fake old session. if err = p.c.SetEx(oldsid, p.duration, "").Err(); err != nil { return nil, err } } if err = p.c.Rename(oldsid, sid).Err(); err != nil { return nil, err } var kv map[interface{}]interface{} kvs, err := p.c.Get(sid).Result() if err != nil { return nil, err } if len(kvs) == 0 { kv = make(map[interface{}]interface{}) } else { kv, err = session.DecodeGob([]byte(kvs)) if err != nil { return nil, err } } return NewRedisStore(p.c, sid, p.duration, kv), nil }
// Read returns raw session store by session ID. func (p *NodbProvider) Read(sid string) (session.RawStore, error) { if !p.Exist(sid) { if err := p.c.Set([]byte(sid), []byte("")); err != nil { return nil, err } } var kv map[interface{}]interface{} kvs, err := p.c.Get([]byte(sid)) if err != nil { return nil, err } if len(kvs) == 0 { kv = make(map[interface{}]interface{}) } else { kv, err = session.DecodeGob(kvs) if err != nil { return nil, err } } return NewNodbStore(p.c, sid, p.expire, kv), nil }
// Read returns raw session store by session ID. func (p *PostgresProvider) Read(sid string) (session.RawStore, error) { var data []byte err := p.c.QueryRow("SELECT data FROM session WHERE key=$1", sid).Scan(&data) if err == sql.ErrNoRows { _, err = p.c.Exec("INSERT INTO session(key,data,expiry) VALUES($1,$2,$3)", sid, "", time.Now().Unix()) } if err != nil { return nil, err } var kv map[interface{}]interface{} if len(data) == 0 { kv = make(map[interface{}]interface{}) } else { kv, err = session.DecodeGob(data) if err != nil { return nil, err } } return NewPostgresStore(p.c, sid, kv), nil }
// Read returns raw session store by session ID. func (p *RedisProvider) Read(sid string) (session.RawStore, error) { if !p.Exist(sid) { if err := p.c.Set(sid, "").Err(); err != nil { return nil, err } } var kv map[interface{}]interface{} kvs, err := p.c.Get(sid).Result() if err != nil { return nil, err } if len(kvs) == 0 { kv = make(map[interface{}]interface{}) } else { kv, err = session.DecodeGob([]byte(kvs)) if err != nil { return nil, err } } return NewRedisStore(p.c, sid, p.duration, kv), nil }