Use Get/Set instead of Rename when Regenerate session id ()

Do not use Rename here, because the old sid and new sid may be in
different redis cluster slot.

Fix 
This commit is contained in:
wxiaoguang 2023-04-08 00:11:24 +08:00 committed by GitHub
parent 26a0cd7143
commit 97d5ec2aeb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -183,16 +183,21 @@ func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err
}
}
if err = p.c.Rename(graceful.GetManager().HammerContext(), poldsid, psid).Err(); err != nil {
return nil, err
}
var kv map[interface{}]interface{}
kvs, err := p.c.Get(graceful.GetManager().HammerContext(), psid).Result()
// do not use Rename here, because the old sid and new sid may be in different redis cluster slot.
kvs, err := p.c.Get(graceful.GetManager().HammerContext(), poldsid).Result()
if err != nil {
return nil, err
}
if err = p.c.Del(graceful.GetManager().HammerContext(), poldsid).Err(); err != nil {
return nil, err
}
if err = p.c.Set(graceful.GetManager().HammerContext(), psid, kvs, p.duration).Err(); err != nil {
return nil, err
}
var kv map[interface{}]interface{}
if len(kvs) == 0 {
kv = make(map[interface{}]interface{})
} else {