Phoenix Framework的Plug.Conn中assign和put_session有什么区别?

Maa*_*gon 10 session elixir phoenix-framework

文档(https://hexdocs.pm/plug/Plug.Conn.html)命名两个函数,允许在一个键值对中存储conn

assign(conn, key, value)
Run Code Online (Sandbox Code Playgroud)

为连接中的键分配值

put_session(conn, key, value)
Run Code Online (Sandbox Code Playgroud)

将指定值放在给定键的会话中

这两个功能有什么区别?

Pat*_*wak 16

基本上assign只适用于特定连接 - Plug.Conn结构 - 这意味着在请求/响应周期结束时,该值将随着请求的结束而消失 - 因为conn也会死亡.

会话寿命更长,并存储在cookie或ets中.多亏了你保持eg.有关跨请求成功登录用户的数据.

TL; DR:

assign适用于每个请求,并在请求周期结束后消失.

put_session 在会话中插入一个值,它在会话清除/过期之前可用.

  • 5年后,获得PR。https://github.com/elixir-plug/plug/pull/1102 (3认同)
  • 实际上,应该使用此详细信息级别来更新Plug文档,这样可以避免造成很多混乱。 (2认同)