如何在特定时间强制关闭会话?

时间:2013-11-27 15:17:54

标签: ruby-on-rails-3 session devise ubuntu-12.04 ruby-1.8.7

我想构建一个rake任务或工具,以便在我想要的时候以及每天晚上9点左右左右的时间内销毁从CLI调用的所有活动会话。

我发现Devise能够指定超时。我使用Devise进行用户会话。尽管他们的系统在超过一小时内保持不活动状态,但我的用户会话中大约有三分之一没有超时。

我不知道我需要什么样的工作。反馈将是一个加号。也许还有一些文档链接。另外,我无法弄清楚如何定位会话来销毁它们。 Rails指南等不清楚它是否会破坏一个用户的会话或所有服务器 - 客户端会话。我需要取消激活所有客户端 - 服务器会话。文档很棒,但我喜欢一些很好的解释。

2 个答案:

答案 0 :(得分:1)

您可以将secret_key存储在ENV变量中。实际上,您应该尝试使您的secret_token远离源代码控制。所以你应该有一个可以在运行时更改的ENV变量。像这样:

YourApp::Application.config.secret_token = ENV['SECRET_TOKEN']

要创建安全令牌,您应该使用SecureRandom.hex(64)。

但无论如何,如果你想要的只是跟踪用户访问网站的时间,你可以创建一个在某些操作之前运行的before_filter。一个简单的例子是:

class ApplicationController < ActionController::Base
  before_filter :save_time_of_last_visit

  def save_time_of_last_visit
    current_user.touch(:last_sign_in_at) if user_signed_in?
  end
end

答案 1 :(得分:0)

如果使用memcache存储会话,则可以创建一个cron任务来重新启动它。