Learn about your user with session$clientData
Getting Non-Input Data From the Client
On the server side, Shiny applications use the
input object to receive user input from the client web browser. The values in
input are set by UI objects on the client web page. There are also non-input values (in the sense that the user doesn’t enter these values through UI components) that are stored in an object called
session$clientData. These values include the URL, the pixel ratio (for high-resolution “Retina” displays), the hidden state of output objects, and the height and width of plot outputs. You can see an example app which uses client data here.
session$clientData values, you need to add a
session argument to your
server function (
session is a special object that is used for finer control over a user’s app session). Once it’s in there, you can access
session$clientData just as you would
In the example below, the client browser will display out the components of the URL and also parse and print the query/search string (the part of the URL after a “
This app will display the following (note that the query string,
?foo=123&bar=somestring was added manually to the URL after lauching the app):
Viewing all available values in clientData
The values in
session$clientData will depend to some extent on the outputs. For example, a plot output object will report its height, width, and hidden status. The app below has a plot output, and displays all the values in
Notice that, just as with
input, values in
session$clientData can be accessed with
session$clientData[['myvar']]. Or, equivalently, since we’ve saved it into a convenience variable
cdata, we can use
For the plot output
output$myplot, there are three entries in
output_myplot_height: The height of the plot on the web page, in pixels.
output_myplot_width: The width of the plot on the web page, in pixels.
output_myplot_hidden: If the object is hidden (not visible), this is
TRUE. This is used because Shiny will by default suspend the output object when it is hidden. When suspended, the observer will not execute even when its inputs change.
Here is the view from the client, with all the
If you have questions about this article or would like to discuss ideas presented here, please post on RStudio Community. Our developers monitor these forums and answer questions periodically. See help for more help with all things Shiny.