11

我正在浏览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

4 回答 4

17

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.

于 2015-06-23T09:50:02.083 回答
13

我认为您正在寻找的是configure_session

Plug.Conn.configure_session(conn, drop: true)
于 2015-06-23T09:49:53.263 回答
1

如果你想删除一个特定的会话,你应该使用:

conn |> fetch_session |> delete_session(:session_to_delete)

更多信息在这里:

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

于 2016-07-09T22:05:59.173 回答
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修改后的内容,删除您放入其中的密钥。

于 2020-09-21T06:51:53.717 回答