【问题标题】:Session not saving in Elixir Phoenix会话未在 Elixir Phoenix 中保存
【发布时间】:2018-11-25 21:42:56
【问题描述】:

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

我这样设置会话:

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

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

...
: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

如何使会话持续存在?

谢谢!

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

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

    get_session(conn, :user_id)
    

    改为。

    【讨论】:

    • 详细说明。 put_session 为键添加指定值,get_session 将通过其键返回该值。来源:get_session docsfetch_session 从会话存储或 cookie 中获取会话。
    • 我的错,我使用了 get_session,奇怪的错字。已编辑。
    【解决方案2】:

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

    如果为了强制执行新会话(例如,如果用户刚刚登录)并且您调用 conn |> configure_session(drop: true) |> clear_session |> put_session(:key, value),则您的会话将为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2012-09-06
      • 2015-10-15
      相关资源
      最近更新 更多