Openresty 操作cookie共有兩種方法:
1、直接操作
1.1 獲取Cookie
獲取所有cookie: ngx.var.http_cookie, 這里獲取的是一個字符串,如果不存在則返回nil 。
獲取單個cookie: ngx.var.cookie_username, 獲取單個cookie,_后面的cookie的name,如果不存在則返回nil 。
1.2 設置Cookie
ngx.header['Set-Cookie'] = {'a=32; path=/', 'b=4; path=/'}-- 批量設置cookie ngx.header['Set-Cookie'] = 'a=32; path=/' -- 設置單個cookie,通過多次調用來設置多個值 ngx.header['Set-Cookie'] = 'b=4; path=/' ngx.header['Set-Cookie'] = 'c=5; path=/; Expires=' .. ngx.cookie_time(ngx.time() + 60 * 30) -- 設置Cookie過期時間為30分鍾
熟悉http協議的應該都知道,設置cookie是通過在響應頭中的Set-Cookie字段來操作的,既然知道原理那上面的代碼應該就很好理解,其實只要知道怎么用lua來設置響應頭即可
注意:設置cookie時要一定要加path和Expires(過期時間),不然無法生效,因為默認過期時間為立即。
2.1、 獲取cookie
local cookie = resty_cookie:new()
local all_cookie = cookie:get_all() -- 這里獲取到所有的cookie,是一個table,如果不存在則返回nil
print(cjson.encode(all_cookie))
print(cookie:get('c'))-- 獲取單個cookie的值,如果不存在則返回nil
2.2、 設置cookie
cookie:set({ key = "c", value = "123456", path = "/", domain = "localhost", expires = ngx.cookie_time(ngx.time() + 60 * 13) })