我通过在session[user]
中存储他们的ID来登录。
我不希望用户从多个设备上的一个帐户登录。我希望该网站在用户登录时为其他会话过期。
我该怎么做?
答案 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这样的服务来存储这种信息比使用数据库要快得多。