I am having some troubles in understanding how sessions work in the shiny-server. I assume that a session finishes when the user close the browser, however, by using the print(session$isClosed())
in the server function I get a FALSE
response at the beginning (so okay) and then when I close the browser nothing happens. Can anyone give me a clue about shiny-server sessions? I would want to store session specific plots to let the users download their plots only.
How sessions work in shiny-server?
20k views Asked by David Mas At
1
Well, to start with a shiny session object is a specific ('R6') data structure in shiny, made of public and private elements. It's purpose is to record one instance of the relationship between one user and shiny (more on this later).
A good way to explore the session object is to play with the shiny example in shiny gallery client-data-and-query-string. It allows to
see
what is contained for example insession$clientdata
or any other element of the object.A couple of additional & misleadingly trivial points:
As an example, to show how the issue is actually quite complex, if I refresh the browser, I end the present session and create a new one.
Coming to
session$isClosed()
, this is not the right function to connect to specific action when a session is ended. This is actually the role of a shiny call back functionA minimal example could be the following:
If you try, refreshing (or breaking up with browser() ) will print "Stop" and will stop the app.
26 September 2017 Edit:
In general, I think it is better to be cautious if the continuity of a session is of importance (and in any case it is appropriate to test
session
code directly onShiny Server
orShiny Server Pro
). Possibly the most important use cases come withShiny Server Pro
, where any disconnectionmay
affect login status etc.).I'm also aware that the
shiny
team has made changes on these areas in recent versions. E.g., it seems that whileonSessionEnded
still works, possibly it is not anymore the best function for this usecase .See the following code as an example (from
shiny
reference guide), usingonStop
, that can work when a session ends, as well as when the app stops.