对 js 不熟所以请大家帮忙,如何设计用户登陆后五分钟不操作就超时退出?
我觉得这应该是 后端行为 如果你是用的 devise 你可以 修改 config/initializers/devise.rb
或者 https://github.com/plataformatec/devise/wiki/How-To:-Add-timeout_in-value-dynamically
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
config.timeout_in = 6.minutes
当然如果 你需要及时 获取用户的 登录状态 我觉得 简单点就定时的去获取 一个需要用户登录的 url 但是 太浪费资源了 感觉
额 这个还真的比较麻烦这还涉及到 rails 的 session 的一些东西。而不是每次都得记录什么登录时间。基本上 都是用的 devise
去处理的。如果你愿意自己去做 建议去参考 devise 的一些 做法
这个这个 就有点 难为我了 devise 里面坑 太深了 https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb
建议向 devise 的作者求助 我即便能点 也太片面了
http://ruby-china.org/wiki/gems 不错啦 能遇到问题 是好事 解决了问题 就是很大的进步了,一般情况可以建议使用 一些 主流的 gem 吧,大家都用它 ...
大概看了下 devise,两个文件
https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb
warden.session(scope)['last_request_at'] = Time.now.utc
每次访问在 session 里面记录最后访问时间
https://github.com/plataformatec/devise/blob/master/lib/devise/models/timeoutable.rb
def timedout?(last_access) return false if remember_exists_and_not_expired? !timeout_in.nil? && last_access && last_access <= timeout_in.ago end
每次访问对比这个最后访问时间,如果小于指定时间以前,就当作过期退出登陆。