2015-06-23 18 views
6

Sto passando attraverso lo Phoenix Guide on Sessions. Lo spiega molto bene come posso legare i dati ad una sessione usando put_session e recuperare il valore successivamente usando get_session ma non dice come posso cancellare la sessione di un utente.Come eliminare una sessione Phoenix?

Dalla guida:

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 

risposta

6

Penso che quello che stai cercando è configure_session:

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

Grazie, io non sono sicuro di cosa andare con. 'clear_session' o' configure_session'. – Sheharyar

+1

Non ne sono sicuro, ma 'conn |> configure_session (: drop)' sembra che lo annulli completamente, quindi è una scommessa più sicura se vuoi che sia –

+0

appena provato, ottengo l'eccezione: Protocollo '' Protocol.UndefinedError '' Accesso non implementato per: drop, solo il nil atom è supportato' – Sheharyar

8

trovato nella Plug Docs:

clear_session(conn)

Cancella l'intera sessione.

Questa funzione rimuove ogni chiave dalla sessione, cancellando la sessione .

Si noti che, anche se clear_session/1 viene utilizzato, la sessione viene comunque inviata al client. Se la sessione deve essere eliminata efficacemente, è necessario utilizzare configure_session/2 con l'opzione: drop impostata su true.


Si può mettere qualcosa di simile nel tuo SessionsController:

def delete(conn, _) do 
    conn 
    |> clear_session 
    |> redirect to: page_path(conn, :index) 
end 

e aggiungere un percorso per questo nella vostra web/router.ex.