凤凰城框架:设置"到期"响应cookie的属性

时间:2016-10-17 02:42:34

标签: cookies elixir phoenix-framework

我正在与凤凰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值,然后插件会转换它们背部。听起来不是最有效的方式。

有没有众所周知的解决问题的方法?

1 个答案:

答案 0 :(得分:2)

工作解决方案已suggested by the Plug maintainers,并解决了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一样工作,但允许多次设置相同的标题。