mirror of
https://gitee.com/johng/gf
synced 2026-07-05 13:22:16 +08:00
add session id check in session object initialzing
This commit is contained in:
@ -24,7 +24,7 @@ const (
|
||||
NAME_TO_URI_TYPE_CAMEL = 3 // 采用驼峰命名方式
|
||||
gDEFAULT_COOKIE_PATH = "/" // 默认path
|
||||
gDEFAULT_COOKIE_MAX_AGE = 86400*365 // 默认cookie有效期(一年)
|
||||
gDEFAULT_SESSION_MAX_AGE = 600 // 默认session有效期(600秒)
|
||||
gDEFAULT_SESSION_MAX_AGE = 600000 // 默认session有效期(600秒)
|
||||
gDEFAULT_SESSION_ID_NAME = "gfsessionid" // 默认存放Cookie中的SessionId名称
|
||||
gCHANGE_CONFIG_WHILE_RUNNING_ERROR = "cannot be changed while running"
|
||||
)
|
||||
|
||||
@ -87,6 +87,14 @@ func (c *Cookie) SessionId() string {
|
||||
return id
|
||||
}
|
||||
|
||||
// 获取SessionId,不存在时则创建
|
||||
func (c *Cookie) MakeSessionId() string {
|
||||
c.init()
|
||||
id := makeSessionId()
|
||||
c.SetSessionId(id)
|
||||
return id
|
||||
}
|
||||
|
||||
// 判断Cookie中是否存在制定键名(并且没有过期)
|
||||
func (c *Cookie) Contains(key string) bool {
|
||||
c.init()
|
||||
|
||||
@ -41,15 +41,24 @@ func GetSession(r *Request) *Session {
|
||||
}
|
||||
}
|
||||
|
||||
// 执行初始化(用于延迟初始化)
|
||||
// @TODO 验证提交的SESSIONID合法性
|
||||
// 执行初始化(用于延迟初始化).
|
||||
func (s *Session) init() {
|
||||
if len(s.id) == 0 {
|
||||
s.id = s.request.Cookie.SessionId()
|
||||
s.server = s.request.Server
|
||||
s.data = s.server.sessions.GetOrSetFuncLock(s.id, func() interface{} {
|
||||
return gmap.NewStringInterfaceMap()
|
||||
}, s.server.GetSessionMaxAge()).(*gmap.StringInterfaceMap)
|
||||
// 根据提交的SESSION ID获取已存在SESSION
|
||||
id := s.request.Cookie.GetSessionId()
|
||||
if id != "" {
|
||||
data := s.server.sessions.Get(id)
|
||||
if data != nil {
|
||||
s.id = id
|
||||
s.data = data.(*gmap.StringInterfaceMap)
|
||||
return
|
||||
}
|
||||
}
|
||||
// 否则执行初始化创建
|
||||
s.id = s.request.Cookie.MakeSessionId()
|
||||
s.data = gmap.NewStringInterfaceMap()
|
||||
s.server.sessions.Set(s.id, s.data, s.server.GetSessionMaxAge())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user