diff --git a/CHANGELOG b/CHANGELOG index 9752f08..3036eaf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ MOCHINE CHANGLOG develop ------------------------------------------------------------ +* multi ``Set-Cookie`` headers via ``Response:set_cookie`` * map url to mch.controller * before/after filter diff --git a/TODO b/TODO index 6b12d76..bda85a1 100644 --- a/TODO +++ b/TODO @@ -3,6 +3,6 @@ MOOCHINE TODO ============================================================ -* multi ``Set-Cookie`` headers +* None diff --git a/luasrc/mch/response.lua b/luasrc/mch/response.lua index bd3079f..1114fee 100644 --- a/luasrc/mch/response.lua +++ b/luasrc/mch/response.lua @@ -29,6 +29,7 @@ Response={ltp=ltp} function Response:new() local ret={ headers=ngx.header, + _cookies={}, _output={} } setmetatable(ret,self) @@ -49,7 +50,7 @@ function Response:redirect(url, status) ngx.redirect(url, status) end -function Response:set_cookie(key, value, encrypt, duration, path) +function Response:_set_cookie(key, value, encrypt, duration, path) if not key or key=="" or not value then return end @@ -69,9 +70,14 @@ function Response:set_cookie(key, value, encrypt, duration, path) local expiretime=ngx.time()+duration expiretime = ngx.cookie_time(expiretime) - ngx.header["Set-Cookie"]={ - table.concat({key, "=", value, "; expires=", expiretime, "; path=", path}) - } + return table.concat({key, "=", value, "; expires=", expiretime, "; path=", path}) +end + +function Response:set_cookie(key, value, encrypt, duration, path) + if not value then self._cookies[key]=nil end + local cookie=self:_set_cookie(key, value, encrypt, duration, path) + self._cookies[key]=cookie + ngx.header["Set-Cookie"]=self._cookies end --[[