diff options
author | Giteabot <teabot@gitea.io> | 2023-04-07 15:21:20 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-07 14:21:20 -0500 |
commit | 3a7cb1a83b4ecd89421b5656b8caeb30c2b13c7c (patch) | |
tree | 43909146396e39fe9f9f8a367a4936a97dcf13a8 | |
parent | f317186aa6318407eb428626521498c8fea00fd9 (diff) | |
download | gitea-3a7cb1a83b4ecd89421b5656b8caeb30c2b13c7c.tar.gz gitea-3a7cb1a83b4ecd89421b5656b8caeb30c2b13c7c.zip |
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>
-rw-r--r-- | modules/session/redis.go | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/modules/session/redis.go b/modules/session/redis.go index 5fb59e4804..b7cdbef6f8 100644 --- a/modules/session/redis.go +++ b/modules/session/redis.go @@ -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 { + // 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 } - var kv map[interface{}]interface{} - kvs, err := p.c.Get(graceful.GetManager().HammerContext(), psid).Result() - if err != nil { + 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 { |