【问题标题】:How does Rails know when to delete a record from the `sessions` table?Rails 如何知道何时从 `sessions` 表中删除记录?
【发布时间】:2011-07-27 03:31:36
【问题描述】:

Rails 如何知道何时从会话表中删除记录?

例如,如果用户访问网站,创建了一个会话记录,但是当用户关闭浏览器窗口时,服务器没有收到任何通知,那么 Rails 是如何从会话表中删除记录的呢?

【问题讨论】:

    标签: ruby-on-rails-3 session


    【解决方案1】:

    有更简单的方法:

    ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 12.hours.ago])
    

    您可以在 Controller 中的一些操作之后调用它,这段代码会杀死所有死会话。

    当然这是有争议的技术,但最简单。

    Full story

    【讨论】:

    • 我真的很想异步执行类似的操作,例如从 cronjob 执行。
    • 这很好用,通过 rails runner 和任何时候 gem 将其作为 cron 作业运行。
    • 我们遇到了类似的问题,不想通过 cron 运行它,所以我们正在试验 MySQL 事件:dev.mysql.com/doc/refman/5.5/en/create-event.html。希望这可以帮助其他人遇到同样的事情。
    • 这里是更新的“全文”链接,认为使用数据存储是一种有争议的技术。 isnorcreative.com/blog/… 在使用多个 Web 服务器时,我们将数据库存储用于会话。这是一个很好的解决方案,只要您清除过时的会话,否则,它会非常膨胀。
    【解决方案2】:

    据我了解,您必须提供自己的会话到期实现。

    This API page 给你一个相当不错的答案来了解它是如何工作的。您创建具有额外属性 created_on 和 updated_at 的数据库表(并且您可以免费获得时间戳),然后您只需通过查看 updated_at 属性创建一个作业以使它们随时到期。

    This post 有如何运行作业的详细信息。

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2011-04-28
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多