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。