1509a6b6 by Pengfei Xue

fix bug, redis session doesnt work

1 parent 38f93a7b
...@@ -16,7 +16,7 @@ var MAX_POOL_SIZE = 100 ...@@ -16,7 +16,7 @@ var MAX_POOL_SIZE = 100
16 var redisPool chan redis.Conn 16 var redisPool chan redis.Conn
17 17
18 type RedisSessionStore struct { 18 type RedisSessionStore struct {
19 c redis.Conn 19 p *redis.Pool
20 sid string 20 sid string
21 lock sync.RWMutex 21 lock sync.RWMutex
22 values map[interface{}]interface{} 22 values map[interface{}]interface{}
...@@ -60,13 +60,15 @@ func (rs *RedisSessionStore) SessionID() string { ...@@ -60,13 +60,15 @@ func (rs *RedisSessionStore) SessionID() string {
60 } 60 }
61 61
62 func (rs *RedisSessionStore) SessionRelease(w http.ResponseWriter) { 62 func (rs *RedisSessionStore) SessionRelease(w http.ResponseWriter) {
63 defer rs.c.Close() 63 c := rs.p.Get()
64 defer c.Close()
65
64 b, err := encodeGob(rs.values) 66 b, err := encodeGob(rs.values)
65 if err != nil { 67 if err != nil {
66 return 68 return
67 } 69 }
68 rs.c.Do("SET", rs.sid, string(b)) 70
69 rs.c.Do("EXPIRE", rs.sid, rs.maxlifetime) 71 c.Do("SET", rs.sid, string(b), "EX", rs.maxlifetime)
70 } 72 }
71 73
72 type RedisProvider struct { 74 type RedisProvider struct {
...@@ -116,10 +118,8 @@ func (rp *RedisProvider) SessionInit(maxlifetime int64, savePath string) error { ...@@ -116,10 +118,8 @@ func (rp *RedisProvider) SessionInit(maxlifetime int64, savePath string) error {
116 118
117 func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) { 119 func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) {
118 c := rp.poollist.Get() 120 c := rp.poollist.Get()
119 if existed, err := redis.Int(c.Do("EXISTS", sid)); err != nil || existed == 0 { 121 defer c.Close()
120 c.Do("SET", sid) 122
121 }
122 c.Do("EXPIRE", sid, rp.maxlifetime)
123 kvs, err := redis.String(c.Do("GET", sid)) 123 kvs, err := redis.String(c.Do("GET", sid))
124 var kv map[interface{}]interface{} 124 var kv map[interface{}]interface{}
125 if len(kvs) == 0 { 125 if len(kvs) == 0 {
...@@ -130,13 +130,15 @@ func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) { ...@@ -130,13 +130,15 @@ func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) {
130 return nil, err 130 return nil, err
131 } 131 }
132 } 132 }
133 rs := &RedisSessionStore{c: c, sid: sid, values: kv, maxlifetime: rp.maxlifetime} 133
134 rs := &RedisSessionStore{p: rp.poollist, sid: sid, values: kv, maxlifetime: rp.maxlifetime}
134 return rs, nil 135 return rs, nil
135 } 136 }
136 137
137 func (rp *RedisProvider) SessionExist(sid string) bool { 138 func (rp *RedisProvider) SessionExist(sid string) bool {
138 c := rp.poollist.Get() 139 c := rp.poollist.Get()
139 defer c.Close() 140 defer c.Close()
141
140 if existed, err := redis.Int(c.Do("EXISTS", sid)); err != nil || existed == 0 { 142 if existed, err := redis.Int(c.Do("EXISTS", sid)); err != nil || existed == 0 {
141 return false 143 return false
142 } else { 144 } else {
...@@ -146,11 +148,11 @@ func (rp *RedisProvider) SessionExist(sid string) bool { ...@@ -146,11 +148,11 @@ func (rp *RedisProvider) SessionExist(sid string) bool {
146 148
147 func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) { 149 func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) {
148 c := rp.poollist.Get() 150 c := rp.poollist.Get()
149 if existed, err := redis.Int(c.Do("EXISTS", oldsid)); err != nil || existed == 0 { 151 defer c.Close()
150 c.Do("SET", oldsid) 152
151 }
152 c.Do("RENAME", oldsid, sid) 153 c.Do("RENAME", oldsid, sid)
153 c.Do("EXPIRE", sid, rp.maxlifetime) 154 c.Do("EXPIRE", sid, rp.maxlifetime)
155
154 kvs, err := redis.String(c.Do("GET", sid)) 156 kvs, err := redis.String(c.Do("GET", sid))
155 var kv map[interface{}]interface{} 157 var kv map[interface{}]interface{}
156 if len(kvs) == 0 { 158 if len(kvs) == 0 {
...@@ -161,13 +163,15 @@ func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er ...@@ -161,13 +163,15 @@ func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
161 return nil, err 163 return nil, err
162 } 164 }
163 } 165 }
164 rs := &RedisSessionStore{c: c, sid: sid, values: kv, maxlifetime: rp.maxlifetime} 166
167 rs := &RedisSessionStore{p: rp.poollist, sid: sid, values: kv, maxlifetime: rp.maxlifetime}
165 return rs, nil 168 return rs, nil
166 } 169 }
167 170
168 func (rp *RedisProvider) SessionDestroy(sid string) error { 171 func (rp *RedisProvider) SessionDestroy(sid string) error {
169 c := rp.poollist.Get() 172 c := rp.poollist.Get()
170 defer c.Close() 173 defer c.Close()
174
171 c.Do("DEL", sid) 175 c.Do("DEL", sid)
172 return nil 176 return nil
173 } 177 }
...@@ -178,7 +182,6 @@ func (rp *RedisProvider) SessionGC() { ...@@ -178,7 +182,6 @@ func (rp *RedisProvider) SessionGC() {
178 182
179 //@todo 183 //@todo
180 func (rp *RedisProvider) SessionAll() int { 184 func (rp *RedisProvider) SessionAll() int {
181
182 return 0 185 return 0
183 } 186 }
184 187
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!