aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2023-04-07 15:21:20 -0400
committerGitHub <noreply@github.com>2023-04-07 14:21:20 -0500
commit3a7cb1a83b4ecd89421b5656b8caeb30c2b13c7c (patch)
tree43909146396e39fe9f9f8a367a4936a97dcf13a8
parentf317186aa6318407eb428626521498c8fea00fd9 (diff)
downloadgitea-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.go13
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 {