Ruby 机架会话重置/过期
目前我正在为我的sinatra Web服务器使用enable:sessions。但我需要转向基于内存的会话管理Ruby 机架会话重置/过期,ruby,session,webserver,sinatra,rack,Ruby,Session,Webserver,Sinatra,Rack,目前我正在为我的sinatra Web服务器使用enable:sessions。但我需要转向基于内存的会话管理 当我使用Rack::Session::Pool时,虽然我的会话似乎在重新加载页面时过期,甚至在进行新的Ajax调用时过期,但它仍会运行。如果您使用的是Passenger或其他Web服务器,这是因为创建了一个新线程。如果您在页面上快速重新加载,您可能会在创建新线程时获得过期会话(它位于特定Web服务器线程的内存中) 如果您缓慢地重新加载页面,则不会使会话过期,因为您的页面仍在同一个Web
当我使用Rack::Session::Pool时,虽然我的会话似乎在重新加载页面时过期,甚至在进行新的Ajax调用时过期,但它仍会运行。如果您使用的是Passenger或其他Web服务器,这是因为创建了一个新线程。如果您在页面上快速重新加载,您可能会在创建新线程时获得过期会话(它位于特定Web服务器线程的内存中)
如果您缓慢地重新加载页面,则不会使会话过期,因为您的页面仍在同一个Web服务器线程上。尼克关于Passenger暴露的线程问题是正确的 Redis是一个很好的内存解决方案。它非常轻。您可以在此处找到更多信息: 我将Redis适配器用于
Rack::Session
您可以在此处找到更多信息:
这很容易。只需在gem文件中包含gem redis机架
,并在sinatra应用程序中执行此操作
require 'redis-rack'
disable :sessions
use Rack::Session::Redis
啊,我明白了。对我来说,问题是我的应用程序是高度Ajax化的,因此我会让电话同时运行。有没有办法,我可以做到这一点?您可以使用Rack::Session:Cookie或Rack::Session:Memcache,我还没有完全测试它们(由于某些原因,我在实现它们时遇到了困难)-或者使用会话存储库的数据库表Prakash,请转到这里查看我的解决方案: