@@ -38,15 +38,15 @@ type Manager struct {
38
38
cookieName string // private cookiename
39
39
lock sync.Mutex // protects session
40
40
provider Provider
41
- maxlifetime int64
41
+ maxLifeTime int64
42
42
}
43
43
44
- func NewManager (provideName , cookieName string , maxlifetime int64 ) (*Manager , error ) {
44
+ func NewManager (provideName , cookieName string , maxLifeTime int64 ) (*Manager , error ) {
45
45
provider , ok := provides[provideName]
46
46
if !ok {
47
47
return nil , fmt.Errorf (" session: unknown provide %q (forgotten import?)" , provideName)
48
48
}
49
- return &Manager{provider: provider, cookieName: cookieName, maxlifetime: maxlifetime }, nil
49
+ return &Manager{provider: provider, cookieName: cookieName, maxLifeTime: maxLifeTime }, nil
50
50
}
51
51
52
52
```
@@ -128,7 +128,7 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se
128
128
if err != nil || cookie.Value == " " {
129
129
sid := manager.sessionId ()
130
130
session, _ = manager.provider .SessionInit (sid)
131
- cookie := http.Cookie {Name: manager.cookieName , Value: url.QueryEscape (sid), Path: " /" , HttpOnly: true , MaxAge: int (manager.maxlifetime )}
131
+ cookie := http.Cookie {Name: manager.cookieName , Value: url.QueryEscape (sid), Path: " /" , HttpOnly: true , MaxAge: int (manager.maxLifeTime )}
132
132
http.SetCookie (w, &cookie)
133
133
} else {
134
134
sid , _ := url.QueryUnescape (cookie.Value )
@@ -214,8 +214,8 @@ func init() {
214
214
func (manager *Manager ) GC () {
215
215
manager.lock .Lock ()
216
216
defer manager.lock .Unlock ()
217
- manager.provider .SessionGC (manager.maxlifetime )
218
- time.AfterFunc (time.Duration (manager.maxlifetime ), func () { manager.GC () })
217
+ manager.provider .SessionGC (manager.maxLifeTime )
218
+ time.AfterFunc (time.Duration (manager.maxLifeTime ), func () { manager.GC () })
219
219
}
220
220
```
221
221
我们可以看到GC充分利用了time包中的定时器功能,当超时` maxLifeTime ` 之后调用GC函数,这样就可以保证` maxLifeTime ` 时间内的session都是可用的,类似的方案也可以用于统计在线用户数之类的。
0 commit comments