我正在与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将它们转换回去。听起来不是最有效的方法。
有什么众所周知的方法来解决此问题?

最佳答案

一个有效的解决方案是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一样工作,但是将允许多次设置相同的标头。

关于cookies - Phoenix Framework:为响应Cookie设置“过期”属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40077757/

10-10 15:28