Elixir Phoenix 中的会话未保存

Session not saving in Elixir Phoenix

我正在制作一个登录控制器。

我这样设置会话:

conn = put_session(conn, :user_id, user.id)
IEx.pry
redirect conn, to: account_path(conn, :show)

当我打印我得到的连接时,它看起来像在撬线上一样设置

...
:plug_session => %{"user_id" => 6}, :plug_session_fetch => :done,
...

然后在我们重定向到的下一个控制器中我们得到

get_session(conn, :user_id) => nil

来自登录控制器的 302 似乎设置了会话 cookie,因为响应包括

set-cookie:_rebirth_key=g3QAAAABbQAAAAd1c2VyX2lkYQY=--KJ9iow5QUIqw1ggyPla--EGp-dY=; path=/; HttpOnly

如何使会话持续存在?

谢谢!

我不确定,但我认为 fetch_session 可能不是从会话中获取值的正确函数。尝试

get_session(conn, :user_id)

相反。

对于可能 运行 遇到与我相同的问题的人;确保你没有打电话给 configure_session(drop: true) 除非你真的想。

如果您在尝试执行新会话(例如用户刚刚登录)时调用 conn |> configure_session(drop: true) |> clear_session |> put_session(:key, value),您的会话将为空。