V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
skylooker
V2EX  ›  问与答

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

  •  
  •   skylooker · 2014-11-21 21:24:53 +08:00 · 3092 次点击
    这是一个创建于 3649 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #服务端主要代码
    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的数量会持续增加,除非重启服务进程。
    4 条回复    2014-11-23 10:56:34 +08:00
    lgn21st
        1
    lgn21st  
       2014-11-21 22:39:55 +08:00   ❤️ 1
    去 RubyChina 问吧: https://ruby-china.org/topics
    liprais
        2
    liprais  
       2014-11-22 11:00:20 +08:00
    rack-timeout?
    undeflife
        3
    undeflife  
       2014-11-23 01:08:25 +08:00   ❤️ 1
    这就是基于cookie的客户端session呀,服务端不会去记录session的状态的.
    增加时间戳活着直接使用user表类似last_sign_at的字段都是可以的,至于消耗多少服务器资源就要看你的用户量了,或者你也可以在服务端使用Memcached/Redis去缓存你的sessionid并设置过期时间.
    skylooker
        4
    skylooker  
    OP
       2014-11-23 10:56:34 +08:00
    @undeflife 谢啦 明白了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3440 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:32 · PVG 19:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.