Phoenix框架:为响应cookie设置“expires”属性

3
我正在使用Phoenix 1.2.1和Elixir 1.3.4。
我需要设置响应cookie的Expires属性。
但我不能使用Max-Age属性。
不幸的是,Plug.Conn.put_response_cookie/4函数不支持expires选项。实际上,即使我可以在我的控制器中得到类似这样的东西:
conn.resp_cookies["my_cookie_name"]
=> %{expires: "Tue, 17-Oct-2017 02:24:24 GMT", path: "/", value: "foo"}
expires值会被忽略,不会在Set-Cookie响应头中返回。
我认为我可以直接设置Set-Cookie头,但是我不能使用Plug.Conn.put_resp_header/3,因为它会覆盖值并确保键的唯一性,并且如果我尝试为不同的cookie设置多个Set-Cookie头,它将无法工作。
我是否遗漏了一些明显的东西?是否有我没有找到的特定功能?这是预期的行为吗(如果是,为什么?)还是我做错了什么?
更新
我查看了Plug.Conn.Cookies.encode/2中cookie如何编码,所以看起来我首先必须将我的过期时间转换为Max-Age值,然后Plug将其转换回来。听起来不是最有效的方法。
有没有已知的方法来解决这个问题?
1个回答

2
Plug维护者提出了一种有效的解决方案,该方案解决了Plug.Conn.put_resp_header/3将覆盖已经设置的头部的问题。具体内容请参考这里
def prepend_response_header(conn, key, value) do
  %{conn | resp_headers: [{key, value} | conn.resp_headers]}
end

这将像Plug.Conn.put_resp_header/3一样工作,但允许多次设置相同的标头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接