Here are the docs for Plug.Conn.get_session
: Plug.Conn.html#get_session/1
And here is the key line from the docs:
Returns the whole session.
And here are the docs for Plug.Conn.fetch_session
: Plug.Conn.html#fetch_session/2
And here is the key line:
Fetches the session from the session store. Will also fetch cookies.
Can anyone explain to me why there are two functions that appear to do almost the same thing? Why would I use one vs the other? What is the session store – why doesn’t get_session
also get the session from the “session store”? Or does it?
Also, in a nutshell, what is the difference between a connection and a session? It seems to me like I should just be able to do something like conn.session
– in fact, I don’t understand why there is something called a session if I already have a connection – why can’t any information stored in the session just be stored in the connection instead?
I don’t understand why there need to be these backflips between connections and sessions.
Session store is the place the session data is stored in between separate http requests. This by default is a cookie, but could also be some server-side database.
fetch_session
does retrieve the session data from the session store to put it onto the conn
of your current web request.
get_session
is the API to fetch session values from the set present on conn
while handling a request
After you’re done handling a certain http request the session data on conn
is put back into the session storage for persistance until the next http request.
1 Like
Thanks! Maybe I’ll submit a PR to the Plug.Conn
docs to make it clear that fetch_session
does not return the session but rather returns the connection.
Well, it says exactly that in “Specs” section of the documentation of that function.
Yes, but not everyone reads specs fluently – a lot of people prefer plain English. So rather than sending people off to do a tutorial on how to read specs, it is better just to be clear, in my opinion.
3 Likes
The fact that fetch_session/2
is sparsely documented is also in part due to the fact that it is a plug and not a function you normally call yourself.
3 Likes