Shinyproxy: [Bug Report] 启用身份验证长时间空闲后出现 Ajax 错误

创建于 2019-03-25  ·  9评论  ·  资料来源: openanalytics/shinyproxy

例如,假设您有以下简单的应用程序。 注意DT表在server = TRUE时使用ajax(服务器处理方式)。

library(shiny)
ui <- fluidPage(DT::DTOutput('tbl'))
server <- function(input, output, session) {
  output$tbl <- DT::renderDT(iris, server = TRUE)
}
runApp(list(ui = ui, server = server))

启用身份验证(任何身份验证方法)后,您打开浏览器并输入应用程序,一切正常(例如单击表格下方的页面按钮)。 但是,在长时间空闲(30 分钟或 1 小时)后,单击页面按钮您会发现 DT 投诉 ajax 错误。 解决方法很简单:刷新页面或者直接打开一个新的连接到 Shinyproxy 并执行重新登录。 但它让用户很困惑。

这是因为长时间空闲后,Shinyproxy 要求您重新登录新连接,但现有连接仍然有效。 它的副作用是现有应用程序尝试执行的 AJAX 发布将被服务器拒绝,因为 Shinyproxy 将其视为新连接......

我相信解决这个问题的方法是

  • 无论何时需要重新登录(也就是超时),断开现有应用程序的连接,或者
  • 将现有应用程序执行的 AJAX 连接识别为有效/授权...

谢谢。

最有用的评论

@shrektan我遇到了类似的问题, OpenAnalytics帮我解决了这个问题:
更改undertow超时(默认为 30 分钟)。

server:
  servlet.session.timeout: 3600

以下以秒为单位 - 如果您没有超时,请将其设置为0
谢谢,迪伦

所有9条评论

@shrektan我遇到了类似的问题, OpenAnalytics帮我解决了这个问题:
更改undertow超时(默认为 30 分钟)。

server:
  servlet.session.timeout: 3600

以下以秒为单位 - 如果您没有超时,请将其设置为0
谢谢,迪伦

@dylancis感谢您的解决方法! 赞赏!

但是,我将问题悬而未决,因为恕我直言,最好在会话超时时断开现有应用的连接。

@dylancis顺便说一句,有点跑题了,您是否尝试过带有 DT 表的 Shinyproxy 的新版本? 我还没有调查原因,但我看到 AJAX 错误说无法接受 POST 方法。

>

@dylancis顺便说一句,有点跑题了,您是否尝试过带有 DT 表的 Shinyproxy 的新版本? 我还没有调查原因,但我看到 AJAX 错误说无法接受 POST 方法。

哎呀 - 不,我还没有。

同样对我来说 - 我从 2.1 过渡到 2.2,现在甚至没有一个renderDataTable工作。 很多 AJAX 错误将我重定向到此页面http://datatables.net/tn/7

我相信这是一个错误......实际上,打开开发人员工具,您可以看到AJAX请求的响应-服务器无法接受POST方法,但GET可以......

@shrektan你有没有提出这个关于 DT 的杏问题? 我们正计划升级,但我们的应用程序严重依赖于数据表库。

@dylancis刚刚在 #140 提交了一个关于这个错误的新问题

正如@dylancis提到的,增加server.servlet.session.timeout将避免这个问题。
但我同意,如果会话超时自动延迟会更好,只要有一个开放的 websocket 通道(触发心跳,从而使容器保持活动状态)。

注意:此评论是关于会话过期导致 401(未经授权)响应。 这与导致 405(不允许的方法)响应的 ajax POST 问题无关。

此页面是否有帮助?
0 / 5 - 0 等级