Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 机架会话重置/过期_Ruby_Session_Webserver_Sinatra_Rack - Fatal编程技术网

Ruby 机架会话重置/过期

Ruby 机架会话重置/过期,ruby,session,webserver,sinatra,rack,Ruby,Session,Webserver,Sinatra,Rack,目前我正在为我的sinatra Web服务器使用enable:sessions。但我需要转向基于内存的会话管理 当我使用Rack::Session::Pool时,虽然我的会话似乎在重新加载页面时过期,甚至在进行新的Ajax调用时过期,但它仍会运行。如果您使用的是Passenger或其他Web服务器,这是因为创建了一个新线程。如果您在页面上快速重新加载,您可能会在创建新线程时获得过期会话(它位于特定Web服务器线程的内存中) 如果您缓慢地重新加载页面,则不会使会话过期,因为您的页面仍在同一个Web

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


当我使用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,请转到这里查看我的解决方案: