Learn R Programming

cookies

Cookies are name-value pairs that are saved in a user’s browser by a website. Cookies allow websites to persist information about the user and their use of the website. The goal of {cookies} it to make it as easy as possible to use cookies in shiny apps.

Installation

Install the released version of {cookies} from CRAN:

install.packages("cookies")

Or install the development version of {cookies} from GitHub with:

# install.packages("remotes")
remotes::install_github("r4ds/cookies")

Use Cases

Several potential use cases motivated the creation of this package.

Saving Settings

In general, cookies can be used to save some sort of setting about the user. This allows you to restore their state (or otherwise know something about that user) the next time they load your app.

Here we’ll use a simple example to demonstrate this concept.

library(cookies)
library(shiny)

# Wrap your ui with add_cookie_handlers() to enable cookies.
ui <- add_cookie_handlers(
  fluidPage(
    titlePanel("A Simple App"),
    fluidRow(
      sliderInput(
        "number_selector",
        label = paste(
          "Select a number.",
          "This selector sets the cookie value.",
          "It also initializes with the cookie value.",
          "Refresh to see it remembered.",
          sep = "\n"
        ),
        min = 1,
        max = 10,
        value = 1
      ),
      sliderInput(
        "number_selector_no_cookie",
        label = paste(
          "Select a number.",
          "This one is not connected to the cookie.",
          "When you refresh, it will always initialize to 1.",
          sep = "\n"
        ),
        min = 1,
        max = 10,
        value = 1
      )
    )
  )
)

server <- function(input, output, session) {
  # When the value changes, set a cookie.
  observeEvent(
    input$number_selector,
    {
      set_cookie(
        cookie_name = "selected_number",
        cookie_value = input$number_selector
      )
    }
  )

  # Initialize the top slider from any cookies that come in at the start.
  observeEvent(
    get_cookie("selected_number"),
    updateSliderInput(
      inputId = "number_selector",
      value = get_cookie("selected_number")
    ),
    once = TRUE
  )
}

shinyApp(
  ui,
  server,
  # Cookies only work in an actual browser.
  options = list(
    launch.browser = TRUE
  )
)

If you run that code, make selections, and refresh your browser, you should see that the first slider is remembered, while the second is not.

Other Use Cases

  • Authentication: This was the motivating use case for this package. You can see a working example of how this can be implemented in {shinyslack}.
  • Last visit: You could log a datestamp when the page loads (and transfer any existing value to another variable or another cookie) to, for example, notify users about new features since their last visit.
  • Many others: If you have a use case but you aren’t certain how to implement it, please open an issue!

Code of Conduct

Please note that the cookies project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('cookies')

Monthly Downloads

465

Version

0.2.3

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Jon Harmon

Last Published

October 2nd, 2023

Functions in cookies (0.2.3)

.validate_logical_scalar

Ensure the argument is a single logical value
.validate_expiration

Ensure expiration is valid
.validate_domain

Ensure domain is valid
set_cookie_on_load

Shiny tag to add cookies on page load
set_cookie_response

Set cookie via HTTP header
set_cookie

Create or update a cookie
get_cookie

Read a cookie
remove_cookie

Remove a cookie
extract_cookie

Extract an individual cookie from a shiny request
extract_cookies

Extract all cookies from a shiny request
.validate_scalar

Ensure the argument is a single logical value
.validate_secure_only

Ensure secure_only is valid
.http_date

Convert expiration days to the expected date format
add_cookie_handlers

Add cookies to an existing shiny ui
cookie_dependency

Attach the js-cookie javascript library for shiny
.shiny_toJSON

Prep data for javascript
.generate_http_attribute_strings

Generate the separate attribute strings
.validate_http_only

Ensure http_only is valid
.http_attributes

Prepare cookie attributes for HTTP
.attributes_string

Condense attributes to a string
.validate_attributes

Ensure cookie attributes are valid
.is_http_only

Is this cookie HttpOnly?
.validate_same_site

Ensure same_site is valid
cookies-package

cookies: Use Browser Cookies with 'shiny'
.shared-parameters

Parameters used in multiple functions
.javascript_attributes

Prepare cookie attributes for javascript
.http_cookie_string

Condense cookie attributes to a set-cookie string
.validate_path

Ensure path is valid
.root_session

Find the main session