【问题标题】:Sinatra Session CachingSinatra 会话缓存
【发布时间】:2025-12-10 22:55:01
【问题描述】:

我在理解如何让 Sinatra 缓存会话时遇到了一些麻烦。当我启动多个应用程序实例(ala Puma 或多个 Thins)时,就会出现此问题。

我要求 Sinatra (1.4) 使用这样的会话:

 enable :sessions
 set :session_secret, 'secret sauce'
 set :protection, except: :session_hijacking

 $connections = []
 set connections: $connections

我将$connections 留在那里以证明此应用正在使用服务器发送的事件,以防万一。

我是他们使用 Persona (Mozilla) 来支持登录/身份验证,并最终将登录的电子邮件存储在 Sinatra 的会话中:

session[:auth_email] = data["email"]

data 是 Persona 给我的。

我无法解决的问题是我如何让 Sinatra 将会话数据存储在持久性存储(理想情况下是 Redis)中,这样应用程序就可以在不丢失会话状态的情况下被回收(我已经这样做了Ramaze 之前是 Ramaze::Cache.options.session = Ramaze::Cache::Redis.using())

【问题讨论】:

    标签: ruby session sinatra rack


    【解决方案1】:

    查看Moneta

    该项目的 Github 页面提供了如何设置的示例,并且非常容易与 Sinatra 集成。

    【讨论】: