目前我正在为我的sinatra网络服务器使用enable:sessions。但我需要进入基于内存的会话管理
当我使用Rack :: Session :: Pool时,虽然我的会话似乎在页面重新加载时失效,或者甚至在正在进行新的Ajax调用时,它仍在运行。
答案 0 :(得分:2)
如果您正在使用Passenger或其他一个Web服务器,那是因为创建了一个新线程。如果您在页面上快速重新加载,您可能会在创建新线程的情况下获得过期会话(它在特定网络服务器线程的内存中)
如果您慢慢重新加载页面,它不会使会话失效,因为您仍然在同一个Web服务器线程上。
答案 1 :(得分:1)
Nick对于Passenger带来的线程问题是正确的。
Redis是一款出色的内存解决方案。它非常轻巧。您可以在此处找到更多信息:http://redis.io/。
我使用Redis适配器Rack::Session
。
您可以在此处找到更多相关信息:http://redis-store.org/redis-rack/
这很容易。只需在Gemfile中包含gem redis-rack
并在sinatra应用程序中执行此操作
require 'redis-rack'
disable :sessions
use Rack::Session::Redis