mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
改进cookie,去掉锁机制
This commit is contained in:
@ -76,7 +76,6 @@ type Server struct {
|
||||
statusHandlerMap map[string]HandlerFunc // 不同状态码下的注册处理方法(例如404状态时的处理方法)
|
||||
// COOKIE
|
||||
cookieMaxAge *gtype.Int // Cookie有效期
|
||||
cookies *gmap.IntInterfaceMap // 当前服务器正在服务(请求正在执行)的Cookie(每个请求一个Cookie对象)
|
||||
// SESSION
|
||||
sessionMaxAge *gtype.Int // Session有效期
|
||||
sessionIdName *gtype.String // SessionId名称
|
||||
@ -189,7 +188,6 @@ func GetServer(name...interface{}) (*Server) {
|
||||
serveCache : gcache.New(),
|
||||
hooksCache : gcache.New(),
|
||||
routesMap : make(map[string]string),
|
||||
cookies : gmap.NewIntInterfaceMap(),
|
||||
sessions : gcache.New(),
|
||||
servedCount : gtype.NewInt(),
|
||||
closeQueue : gqueue.New(),
|
||||
|
||||
@ -37,19 +37,18 @@ type CookieItem struct {
|
||||
|
||||
// 获取或者创建一个cookie对象,与传入的请求对应
|
||||
func GetCookie(r *Request) *Cookie {
|
||||
if v := r.Server.cookies.Get(r.Id); v != nil {
|
||||
return v.(*Cookie)
|
||||
if r.Cookie != nil {
|
||||
return r.Cookie
|
||||
}
|
||||
c := &Cookie {
|
||||
r.Cookie = &Cookie {
|
||||
data : make(map[string]CookieItem),
|
||||
domain : r.GetHost(),
|
||||
server : r.Server,
|
||||
request : r,
|
||||
response : r.Response,
|
||||
}
|
||||
c.init()
|
||||
r.Server.cookies.Set(r.Id, c)
|
||||
return c
|
||||
r.Cookie.init()
|
||||
return r.Cookie
|
||||
}
|
||||
|
||||
// 从请求流中初始化,无锁
|
||||
@ -125,14 +124,10 @@ func (c *Cookie) Remove(key, domain, path string) {
|
||||
c.SetCookie(key, "", domain, path, -86400)
|
||||
}
|
||||
|
||||
// 请求完毕后删除已经存在的Cookie对象
|
||||
func (c *Cookie) Close() {
|
||||
c.server.cookies.Remove(c.request.Id)
|
||||
}
|
||||
|
||||
// 输出到客户端
|
||||
func (c *Cookie) Output() {
|
||||
c.mu.RLock()
|
||||
defer c.mu.RUnlock()
|
||||
for k, v := range c.data {
|
||||
// 只有expire != 0的才是服务端在本地请求中设置的cookie
|
||||
if v.expire == 0 {
|
||||
@ -150,5 +145,4 @@ func (c *Cookie) Output() {
|
||||
},
|
||||
)
|
||||
}
|
||||
c.mu.RUnlock()
|
||||
}
|
||||
|
||||
@ -198,8 +198,6 @@ func (s *Server) startCloseQueueLoop() {
|
||||
if v := s.closeQueue.PopFront(); v != nil {
|
||||
r := v.(*Request)
|
||||
s.callHookHandler(HOOK_BEFORE_CLOSE, r)
|
||||
// 关闭当前会话的Cookie
|
||||
r.Cookie.Close()
|
||||
// 更新Session会话超时时间
|
||||
r.Session.UpdateExpire()
|
||||
s.callHookHandler(HOOK_AFTER_CLOSE, r)
|
||||
|
||||
Reference in New Issue
Block a user