Wes*_*lte 5 ruby session heroku sinatra
我已经成功解决了会话成员不可用的问题,即使它们已设置,我想知道为什么会发生这种情况。我的情况可以描述为:
:session.:ret_url会话成员,以便应用程序知道在身份验证后返回到哪里。这在本地运行时效果很好,但:ret_url会话成员从 Heroku 上的会话中完全消失了。我发现如果我删除这段代码就可以解决问题:
before do
cache_control :public, :must_revalidate, :max_age => 60
end
Run Code Online (Sandbox Code Playgroud)
问题 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
Run Code Online (Sandbox Code Playgroud)
我想使用缓存并且仍然让我的 cookie 有效。
在不了解所有细节的情况下很难看到发生了什么,但是您很可能违反了一个简单的规则:不要在应该执行某些操作(除了显示页面之外)的操作上使用 http 缓存。当 http 缓存打开时,浏览器甚至不会尝试重新加载页面并从浏览器缓存中呈现它。
Cookie 不会缓存在任何地方,cache_control 唯一做的就是设置 CacheControl http 响应值
在您的情况下,您可以做的最好的事情是将没有操作页面的路由列表添加到您的 before 块中:
before '/my/static/page' do
cache_control :public, :must_revalidate, :max_age => 60
end
Run Code Online (Sandbox Code Playgroud)
最有可能的是,您可以从 http 缓存中受益的路由集非常有限
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |