我曾经使用 Rack Session Pool,但是我的用户会从一个 Web 服务器线程跳转到另一个线程,导致 session 数据过期。我开始尝试在 Sinatra 中启用 :sessions,但是由于有多个使用 Sinatra 的应用程序(看起来使用相同的密钥-不确定是否因为是同一主机),所以我无法使用该功能。
因此,由于我的应用程序会互相干扰,我现在尝试使用 Rack Session Cookie 并设置变量(与启用 :sessions 相同,但可以设置变量)。
很好,这样可以工作!但是现在我无法像在 Rack Session Pool 和 enable: sessions 中使用时那样访问 session 数据。
你可以在Pool和Sinatra启用: sessions时使用session[:user]访问会话数据,但是在Rack Session Cookie中却不能。我的问题是为什么?我有遗漏什么吗?我所做的只是以下内容:
config.ru
因此,由于我的应用程序会互相干扰,我现在尝试使用 Rack Session Cookie 并设置变量(与启用 :sessions 相同,但可以设置变量)。
很好,这样可以工作!但是现在我无法像在 Rack Session Pool 和 enable: sessions 中使用时那样访问 session 数据。
session[:user] = nick
puts session[:user]
你可以在Pool和Sinatra启用: sessions时使用session[:user]访问会话数据,但是在Rack Session Cookie中却不能。我的问题是为什么?我有遗漏什么吗?我所做的只是以下内容:
config.ru
use Rack::Session::Cookie, :key => 'key',
:domain => "localhost",
:path => '/',
:expire_after => 14400, # In seconds
:secret => 'secret'
编辑:
进行了更多的测试后发现,实际上它将其放入会话变量中,但是一旦移动到新方法或重定向,会话变量似乎被丢弃了(这个 cookie 真的比 4KB 大吗?!) - 这不可能是因为启用:sessions 是完全正常的。