机架会话重置/过期

时间:2011-02-13 09:52:22

标签: ruby session webserver sinatra rack

目前我正在为我的sinatra网络服务器使用enable:sessions。但我需要进入基于内存的会话管理

当我使用Rack :: Session :: Pool时,虽然我的会话似乎在页面重新加载时失效,或者甚至在正在进行新的Ajax调用时,它仍在运行。

2 个答案:

答案 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