Session 我如何';到期日';在西纳特拉的会议?

Session 我如何';到期日';在西纳特拉的会议?,session,sinatra,rack,Session,Sinatra,Rack,我通过在会话[user]中存储他们的ID来登录 我不希望用户从多个设备上的一个帐户登录。我希望该站点在用户登录时终止其他会话 如何做到这一点?Sinatra中的默认会话只是底层机架会话对象的别名。您需要直接使用Rack::Session::Cookie而不是enable:sessions来设置过期等选项(如中所述): #config.ru 使用Rack::Session::Cookie,:key=>“Rack.Session”, :domain=>'foo.com', :path=>“/”, :

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

我不希望用户从多个设备上的一个帐户登录。我希望该站点在用户登录时终止其他会话


如何做到这一点?

Sinatra中的默认会话只是底层机架会话对象的别名。您需要直接使用
Rack::Session::Cookie
而不是
enable:sessions
来设置过期等选项(如中所述):

#config.ru
使用Rack::Session::Cookie,:key=>“Rack.Session”,
:domain=>'foo.com',
:path=>“/”,
:expire_after=>2592000,#秒
:secret=>“改变我”

Sinatra中的默认会话只是底层机架会话对象的别名。您需要直接使用
Rack::Session::Cookie
而不是
enable:sessions
来设置过期等选项(如中所述):

#config.ru
使用Rack::Session::Cookie,:key=>“Rack.Session”,
:domain=>'foo.com',
:path=>“/”,
:expire_after=>2592000,#秒
:secret=>“改变我”

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


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

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


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

谢谢你的回答,但就像@ch4nd4n所说的,它并不完全是我要找的。谢谢你的回答,但就像@ch4nd4n所说的,它并不完全是我要找的。谢谢你,伙计!我最终得到了一个类似的解决方案,只是我只是将会话id存储在DB中的用户配置文件中(它不是大型应用程序atm),并且除非当前会话的id与存储在DB中的id相同,否则我将用户注销。我在登录时存储会话id。谢谢伙计!我最终得到了一个类似的解决方案,只是我只是将会话id存储在DB中的用户配置文件中(它不是大型应用程序atm),并且除非当前会话的id与存储在DB中的id相同,否则我将用户注销。我在登录时存储会话id。