我已经成功解决了会话成员不可用的问题,即使他们已设置并且想知道为什么会发生这种情况。我的情况可以描述为:
- Sinatra 应用程序使用
:session
. - 使用 oAuth 授权用户并在此过程中设置
:ret_url
会话成员,以便应用知道在身份验证后返回到哪里。 - 服务器是 Cedar 堆栈上的独角兽(Heroku)
这在本地运行时非常有效,但:ret_url
会话成员完全从 Heroku 的会话中消失了。我发现如果我删除了这段代码,它可以解决问题:
before do
cache_control :public, :must_revalidate, :max_age => 60
end
问题 1:我猜我的 cookie 在没有:ret_url
值的情况下被缓存,这就是它被破坏的原因?
问题2:我在下面的路由条件代码中设置了会话成员,这是错误的地方吗?
# redirect users to login if necessary
set(:auth) do |access_token|
condition do
if request.request_method == 'GET'
session[:ret_url] = request.path_info
end
redirect '/' unless user_logged_in?
end
end
我想使用缓存并且我的 cookie 仍然有效。