【问题标题】:How to access browser session/cookies from within Shiny App如何从 Shiny App 中访问浏览器会话/cookie
【发布时间】:2015-11-27 23:49:36
【问题描述】:

如何从 Shiny 应用程序中访问 c​​ookie 和其他与浏览器相关的会话数据?

通过session$clientData,我们可以获取其他客户端详细信息,例如主机、端口、查询参数...

有没有其他方法可以在闪亮的应用程序中获取 cookie?

【问题讨论】:

  • 您可以在 javascript 端获取它并使用Shiny.onInputChange 将其传递回 Shiny
  • 没有javascript就不行吗?
  • 也许,但我不知道
  • 也许这会有所帮助:session$request$HTTP_COOKIE。正如@daatali 所说,Shiny 有一些功能:js 到服务器:Shiny.onInputChange(id,data);服务器到 js:session$sendCustomMessage(id,data); js 处理程序:Shiny.addCustomMessageHandler(id,function);
  • Shiny-Server 似乎删除了一些 http 标头。这不是一个好主意,session$request$HTTP_COOKIE 将是 NULL。 groups.google.com/d/msg/shiny-discuss/nHFbL0K38k8/FndeYifoAwAJ

标签: r cookies shiny


【解决方案1】:

要在出色的 cmets 上进行构建,您可以使用带有 Shiny.OnInputChange() 函数的 js.cookie.js 包来返回 cookie。

这里有一个示例应用程序:https://beta.rstudioconnect.com/iwallace/cookies/

--ui.r--

library(shiny)
library(shinydashboard)

fluidPage(
tags$head(tags$script(src="js.cookie.js")),
# a shiny element to display unformatted text
box(title ="click the gray square to view cookies!",    verbatimTextOutput("results"),actionButton("go","click me")),

# javascript code to send data to shiny server
tags$script('
          document.getElementById("go").onclick = function() {
          var number = Math.random();

          Cookies.set(\'name\', \'value\', { expires: 7 });
          Cookies.set(\'cookie_2\', \'value\', { expires: 7 });

          var my_cookie = Cookies.get(); 

          Shiny.onInputChange("mydata", my_cookie);
          };
          ')

)

--server.r--

library(shiny)

shinyServer(function(input, output,session) {
output$results = renderPrint({
input$mydata
})

})

【讨论】:

  • 请问您是否可以在 SHiny 应用程序启动时无需单击按钮即可捕获 cookie?谢谢
猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 2014-02-21
  • 2023-03-06
  • 2014-04-04
  • 2019-06-08
  • 2018-10-25
  • 2014-04-15
相关资源
最近更新 更多