使用`Rack::Session::Pool`替代`Rack::Session::Cookie`

15
以下是您需要翻译的内容:

Rack::Session::PoolRack::Session::Cookie 有哪些不同的用例?

据我所知(如果我错了,请纠正我):

  • Cookie 直接在 cookie 中存储 所有 的会话键值对(序列化)
  • Pool 仅在 cookie 中存储一个 id,并在 @pool 中维护其余会话哈希表

那么:选择其中之一的影响/原因是什么? 什么是 @pool? 为什么 Pool 需要公开与 Cookie 不同的公共接口? 为什么文档如此缺乏?

1个回答

15
你是对的,Session::Cookie将会把会话数据编组成cookie并存储在其中。
相比之下,Session::Pool则将会话数据存储在内存中。 Pool有一些优势:
- faster, no marshaling needed 
- you can keep any objects with it(read ones that can not be marshaled)

但是,当您重新启动应用程序时,所有会话都将丢失。

使用Cookie代替,您将以编组为代价获得重启持久会话。

替代方案 - Session::Memcache, Session::Mongo


1
Rack::Session::Moneta: http://www.rubydoc.info/github/minad/moneta/Rack/Session/Moneta 还提供了一个抽象的会话存储接口,可用于许多键值存储。 - Ross Attrill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接