【问题标题】:How can I force sessions closed at a specific time? [duplicate]如何强制在特定时间关闭会话? [复制]
【发布时间】:2013-11-27 15:17:54
【问题描述】:

我想构建一个 rake 任务或工具来销毁从 CLI 调用的所有活动会话,当我需要时以及每晚大约晚上 9:00 左右。

我发现 Devise 可以指定超时。我将设计用于用户会话。尽管系统处于非活动状态超过一个小时,但我的用户中约有三分之一的会话从未超时。

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

【问题讨论】:

  • 不知道为什么要始终在特定时间重置会话...强迫用户记住他们的用户名和密码绝不是一件好事。无论如何,这个其他问题应该可以帮助你:stackoverflow.com/questions/16406208/…
  • 对于“时间卡”系统。这不是强迫他们记住他们的凭据,更多的是关于跟踪他们登录和注销的时间——但如果他们从不注销,那么这一点就完全丢失了。我喜欢更改会话的想法,但似乎您实际上必须手动更改 config/initializers/session_store 脚本。我的第一个想法是制作一个脚本,用随机生成的键值自动更改它——但随后版本控制几乎消失了。据您所知,有没有办法解决这个问题?
  • 但是如果你强制退出,你仍然不知道你的用户退出的实际时间。在我看来,您真正想要的只是跟踪登录时间。
  • 这基本上是正确的。如果他们的会话仍处于活动状态,则无法生成新的时间卡。所有会议必须在一天结束时关闭,才能在第二天打开考勤卡。该卡跟踪登录时间、第一个帐户完成时间、午餐和午餐时间、最后一个帐户完成时间、完成的帐户总数和注销。如果用户没有注销,我们会取消最后一个帐户完成时间。注销不如登录重要,但我们试图鼓励人们记住要注销。

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


【解决方案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

【讨论】:

  • 由于分配了一个更重要的项目,我还没有机会对此进行测试,但我相信这应该是我需要的。将此标记为我的答案,再次感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2018-05-25
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多