From 768dd76b629f1b1092ae20e60d361743ef7863ed Mon Sep 17 00:00:00 2001 From: Akira Ho Date: Wed, 15 Aug 2018 14:21:22 +0800 Subject: [PATCH 1/3] fix / lifetime.Time not updated on expiration shift Former-commit-id: 03cd1e8dcf20d6e68b70667d1f808860cb027d32 --- sessions/lifetime.go | 1 + 1 file changed, 1 insertion(+) diff --git a/sessions/lifetime.go b/sessions/lifetime.go index 1ba6c02a..3f79ce77 100644 --- a/sessions/lifetime.go +++ b/sessions/lifetime.go @@ -43,6 +43,7 @@ func (lt *LifeTime) Revive(onExpire func()) { // Shift resets the lifetime based on "d". func (lt *LifeTime) Shift(d time.Duration) { if d > 0 && lt.timer != nil { + lt.Time = time.Now().Add(d) lt.timer.Reset(d) } } From 4e7ca254d90049339a1193087655c7d2ac876d8b Mon Sep 17 00:00:00 2001 From: Akira Ho Date: Thu, 16 Aug 2018 17:37:41 +0800 Subject: [PATCH 2/3] fix / redis service.TTL() returns seconds, hasExpiration, found Former-commit-id: 25743848458f2a6cf3e78d5ae119d2ba2a822f79 --- sessions/sessiondb/redis/service/service.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sessions/sessiondb/redis/service/service.go b/sessions/sessiondb/redis/service/service.go index 186368d3..d82397e4 100644 --- a/sessions/sessiondb/redis/service/service.go +++ b/sessions/sessiondb/redis/service/service.go @@ -3,7 +3,6 @@ package service import ( "fmt" "time" - "github.com/gomodule/redigo/redis" "github.com/kataras/iris/core/errors" ) @@ -84,7 +83,7 @@ func (r *Service) Get(key string) (interface{}, error) { // TTL returns the seconds to expire, if the key has expiration and error if action failed. // Read more at: https://redis.io/commands/ttl -func (r *Service) TTL(key string) (seconds int64, hasExpiration bool, ok bool) { +func (r *Service) TTL(key string) (seconds int64, hasExpiration bool, found bool) { c := r.pool.Get() defer c.Close() redisVal, err := c.Do("TTL", r.Config.Prefix+key) @@ -93,14 +92,15 @@ func (r *Service) TTL(key string) (seconds int64, hasExpiration bool, ok bool) { } seconds = redisVal.(int64) // if -1 means the key has unlimited life time. - hasExpiration = seconds == -1 + hasExpiration = seconds > -1 // if -2 means key does not exist. - ok = (c.Err() != nil || seconds == -2) + found = ! (c.Err() != nil || seconds == -2) return } func (r *Service) updateTTLConn(c redis.Conn, key string, newSecondsLifeTime int64) error { reply, err := c.Do("EXPIRE", r.Config.Prefix+key, newSecondsLifeTime) + if err != nil { return err } From 45c1f6427f51e8cacc0e6359c441af239999e327 Mon Sep 17 00:00:00 2001 From: Akira Ho Date: Thu, 16 Aug 2018 17:42:01 +0800 Subject: [PATCH 3/3] fix / redis.getKeysConn() returns keys without Config.Prefix otherwise such keys passed into updateTTLConn() would get duplicate prefixes failing the ttl reset Former-commit-id: bfcc02e5db16216d221c533fc28919fe292d6532 --- sessions/sessiondb/redis/service/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessions/sessiondb/redis/service/service.go b/sessions/sessiondb/redis/service/service.go index d82397e4..dbe58fc7 100644 --- a/sessions/sessiondb/redis/service/service.go +++ b/sessions/sessiondb/redis/service/service.go @@ -201,7 +201,7 @@ func (r *Service) getKeysConn(c redis.Conn, prefix string) ([]string, error) { if keysSliceAsBytes, ok := keysInterface[1].([]interface{}); ok { keys := make([]string, len(keysSliceAsBytes), len(keysSliceAsBytes)) for i, k := range keysSliceAsBytes { - keys[i] = fmt.Sprintf("%s", k) + keys[i] = fmt.Sprintf("%s", k)[len(r.Config.Prefix):] } return keys, nil