新手问题 如何设计登陆后超时退出?

topswim · 2013年02月28日 · 最后由 Rei 回复于 2013年02月28日 · 3226 次阅读

对 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 但是 太浪费资源了 感觉

#1 楼 @jhjguxin 我是自己写的一个用户管理的模块

好吧 但是 会话的 有效性 主要还是 该通过 后端去控制的

#3 楼 @jhjguxin 我明白你的意思!是在后台去监控回话的登陆时间如果超时中断,回话。那我是不是还要在数据库中记录他的登陆时间,每次他提交任何东西我都去记录时间,然后在比较上次提交和这次时间差?这样有点麻烦啊!

额 这个还真的比较麻烦这还涉及到 rails 的 session 的一些东西。而不是每次都得记录什么登录时间。基本上 都是用的 devise 去处理的。如果你愿意自己去做 建议去参考 devise 的一些 做法

#5 楼 @jhjguxin 老大那你知道 devise 怎么做的吗?

这个这个 就有点 难为我了 devise 里面坑 太深了 https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb

建议向 devise 的作者求助 我即便能点 也太片面了

#7 楼 @jhjguxin 我也是初学啊!而且 web 新手!看 ruby-china 的代码我都吃力!回去好好看书!在研究吧

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

每次访问对比这个最后访问时间,如果小于指定时间以前,就当作过期退出登陆。

#10 楼 @Rei session 这个东西对我很神秘密?不知道怎么使用,向这样可以吗?: session[:user_id][:last_request_at]=time.now

#11 楼 @topswim session 就是加密在 cookies 的一个 hash,每个用户独立的,所以

session[:last_request_at]=time.now

就行了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号