我如何在Sinatra'到期'会议?

时间:2013-06-04 18:09:51

标签: session sinatra rack

我通过在session[user]中存储他们的ID来登录。

我不希望用户从多个设备上的一个帐户登录。我希望该网站在用户登录时为其他会话过期。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

Sinatra中的默认会话只是底层Rack会话对象的别名。您需要直接使用Rack::Session::Cookie代替enable :sessions来设置过期等选项(如Sinatra FAQ: How Do I Use Sessions?中所述):

# config.ru
use Rack::Session::Cookie, :key => 'rack.session',
                           :domain => 'foo.com',
                           :path => '/',
                           :expire_after => 2592000, # In seconds
                           :secret => 'change_me'   

答案 1 :(得分:1)

您可以使用一些缓存存储(如Memcached / Redis / Database)将登录用户的记录保存为userid到sessionid的键值对。在创建新会话的代码块中,检查密钥是否存在。如果是,则使会话ID到期。创建新会话并将会话ID存储在密钥中。

注意我没有实现完全相同的用例,但使用memcached做了类似的事情。使用像memcache这样的服务来存储这种信息比使用数据库要快得多。

相关问题