如何删除Phoenix会话?

时间:2015-06-23 09:38:03

标签: elixir phoenix-framework

我正在浏览Phoenix Guide on Sessions。它很好地解释了我如何使用put_session将数据绑定到会话并稍后使用get_session获取值,但它并没有告诉我如何删除用户的会话。

从指南中:

defmodule HelloPhoenix.PageController do
  use Phoenix.Controller

  def index(conn, _params) do
    conn = put_session(conn, :message, "new stuff we just set in the session")
    message = get_session(conn, :message)

    text conn, message
  end
end

4 个答案:

答案 0 :(得分:10)

Plug Docs

中找到它
  

<强> clear_session(conn)

     

清除整个会话。

     

此功能从会话中删除每个键,清除   会话。

     

请注意,即使使用clear_session / 1,仍会发送会话   给客户。如果会话应该被有效地删除,   configure_session / 2应该与:drop选项设置为true一起使用。

您可以在SessionsController

中添加类似内容
def delete(conn, _) do
    conn
    |> clear_session
    |> redirect to: page_path(conn, :index)
end

并在web/router.ex中为此添加路线。

答案 1 :(得分:8)

我认为你要找的是configure_session

Plug.Conn.configure_session(conn, drop: true)

答案 2 :(得分:1)

如果要删除特定会话,请使用:

conn |> fetch_session |> delete_session(:session_to_delete)

此处有更多信息:

https://github.com/elixir-lang/plug/blob/master/lib/plug/session.ex#L114:L115

答案 3 :(得分:0)

仅使用delete_session/2删除您之前创建的会话,然后重定向到登录名或其他内容!

示例:

# In this example I use a log_out link to delete session when user click in it.
def log_out(conn, _params) do
    conn
    |> delete_session(:session_name)
    |> redirect(to: Routes.auth_path(conn, :login))
end

重要的是返回经过修改的conn,删除您放入其中的密钥。