在 Ruby + Sinatra + Thin 的环境中,如何设置服务端 Session 的超时时间?一下午都在愁这个事。

2014-11-21 21:24:53 +08:00
 skylooker
#服务端主要代码
use Rack::Session::Cookie, :key => 'abc',
:expire_after => 15, # == one day
:secret => 'This one time, at band camp...'
get '/admin' do
session['user_type'] = '有效用户'
"your session id #{session[:id].inspect}"
end

get '/admin/test' do
"#{session.inspect}"
end

######
主要问题:
浏览器在15秒之后,会清空session(基于cookie的)。
而我在本地用curl提交之前的session(即已被浏览器清空的session), 服务器返回依旧是"有效用户",也就是说,服务器并没有在15秒之后自动清空该session。。。
######
我的疑问:
1、session究竟是rack维持的?还是thin维持的?
2、有么有相关的方法,用来设置session的时效?
3、如果对每个session设置时间戳,每次加以验证,会不会消耗大量服务器资源?毕竟session的数量会持续增加,除非重启服务进程。
3021 次点击
所在节点    问与答
4 条回复
lgn21st
2014-11-21 22:39:55 +08:00
去 RubyChina 问吧: https://ruby-china.org/topics
liprais
2014-11-22 11:00:20 +08:00
rack-timeout?
undeflife
2014-11-23 01:08:25 +08:00
这就是基于cookie的客户端session呀,服务端不会去记录session的状态的.
增加时间戳活着直接使用user表类似last_sign_at的字段都是可以的,至于消耗多少服务器资源就要看你的用户量了,或者你也可以在服务端使用Memcached/Redis去缓存你的sessionid并设置过期时间.
skylooker
2014-11-23 10:56:34 +08:00
@undeflife 谢啦 明白了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/148381

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX