Skip to content

Commit 3a7cb1a

Browse files
GiteaBotwxiaoguang
andauthored
Use Get/Set instead of Rename when Regenerate session id (#23975) (#23983)
Backport #23975 by @wxiaoguang Do not use Rename here, because the old sid and new sid may be in different redis cluster slot. Fix #23869 Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent f317186 commit 3a7cb1a

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

modules/session/redis.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,21 @@ func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err
183183
}
184184
}
185185

186-
if err = p.c.Rename(graceful.GetManager().HammerContext(), poldsid, psid).Err(); err != nil {
186+
// do not use Rename here, because the old sid and new sid may be in different redis cluster slot.
187+
kvs, err := p.c.Get(graceful.GetManager().HammerContext(), poldsid).Result()
188+
if err != nil {
187189
return nil, err
188190
}
189191

190-
var kv map[interface{}]interface{}
191-
kvs, err := p.c.Get(graceful.GetManager().HammerContext(), psid).Result()
192-
if err != nil {
192+
if err = p.c.Del(graceful.GetManager().HammerContext(), poldsid).Err(); err != nil {
193193
return nil, err
194194
}
195195

196+
if err = p.c.Set(graceful.GetManager().HammerContext(), psid, kvs, p.duration).Err(); err != nil {
197+
return nil, err
198+
}
199+
200+
var kv map[interface{}]interface{}
196201
if len(kvs) == 0 {
197202
kv = make(map[interface{}]interface{})
198203
} else {

0 commit comments

Comments
 (0)