Почему я не могу установить несколько файлов cookie

Я пытаюсь установить несколько файлов cookie, но это не работает:

if type(ngx.header["Set-Cookie"]) ~= "table" then
    ngx.header["Set-Cookie"] = {}
end
table.insert(ngx.header["Set-Cookie"], "Cookie1=abc; Path=/")
table.insert(ngx.header["Set-Cookie"], "Cookie2=def; Path=/")
table.insert(ngx.header["Set-Cookie"], "Cookie3=ghi; Path=/")

На клиенте я не получаю никаких файлов cookie.


person Dat Boi    schedule 17.05.2017    source источник


Ответы (2)


ngx.header["Set-Cookie"] — это специальная таблица, и ее необходимо переназначать новой таблице каждый раз, когда вы ее изменяете (элементы, вставленные или удаленные из нее, не влияют на файлы cookie, которые будут отправлены клиенту):

if type(ngx.header["Set-Cookie"]) == "table" then
    ngx.header["Set-Cookie"] = { "AnotherCookieValue=abc; Path=/", unpack(ngx.header["Set-Cookie"]) }
else
    ngx.header["Set-Cookie"] = { "AnotherCookieValue=abc; Path=/", ngx.header["Set-Cookie"] }
end
person wilsonzlin    schedule 17.05.2017

Вы можете использовать https://github.com/cloudflare/lua-resty-cookie.

local ck = require "resty.cookie"
local cookie, err = ck:new()
cookie:set({key = "Cookie1", value = "abc", path = "/"})
cookie:set({key = "Cookie2", value = "def", path = "/"})
cookie:set({key = "Cookie3", value = "ghi", path = "/"})
person Alexander Altshuler    schedule 19.05.2017