凤凰框架:设置响应 cookie 的"expires"属性



我正在使用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标头,则不会起作用。

我错过了什么明显的吗?是否有我没有找到的特定功能?
这是预期的行为(如果是,为什么?)还是我做错了什么?

更新

我已经看了一下cookie是如何在Plug.Conn.Cookies.encode/2中编码的,所以看起来我首先必须将过期时间转换为Max-Age值,然后Plug将它们转换回来。这听起来不是最有效的方法。

有什么众所周知的方法来解决这个问题吗?

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一样工作,但将允许多次设置相同的标题

最新更新