我有以下设置:
Sinatra app通过nginx代理,并在nginx配置中定义了重定向:
http://www.example.com/api至http://api.example.com
我使用以下内容初始化会话:
use Rack::Session::Pool
现在我可以使用以下方式存储和检索会话数据
get '/make_it_so' do
session[:data] = 'yes indeed.'
end
get '/what_gives' do
session[:data]
end
对于3到5次重新加载http://www.example.com/what_gives我可以看到会话数据,然后突然消失为零。
有人可以帮忙吗?
类似的问题是:
答案 0 :(得分:0)
我认为你的问题可能是独角兽工人。据我所知,Unicorn为每个工人创建一个应用程序实例。不幸的是,这些实例中的每一个都会有一个单独的会话池,因此这只适用于1名工作人员。
我遇到了同样的问题,并不是说会话随着时间的推移而丢失,而是这些请求正由不同的工作人员处理。假设您的第一个请求命中工作者1并且它设置了会话密钥' sessionkey1',您将获得具有相同值的cookie。然后你发出第二个请求并且它命中工人2,它将找不到你的密钥,因此你将被分配一个新的会话和cookie,使你的会话看起来像是丢失了。
我不知道是否有办法连接这些池,但我认为移动到Redis这样的外部会话商店会更容易。 Redis可以通过redis-rack gem轻松地与Rack集成,因此您应该尝试一下。
希望这有帮助。