Ruby on rails 3 Rails如何知道何时从“sessions”表中删除记录?

Ruby on rails 3 Rails如何知道何时从“sessions”表中删除记录?,ruby-on-rails-3,session,Ruby On Rails 3,Session,Rails如何知道何时从sessions表中删除记录 例如,如果用户访问网站,会创建会话记录,但当用户关闭浏览器窗口时,服务器不会收到任何通知,那么Rails如何从会话表中删除记录?据我所知,您必须提供自己的会话过期实现 给你一个很好的答案来解释它是如何工作的。您可以使用在上创建并在上更新的额外属性创建数据库表(并且可以免费获得时间戳),然后只需创建一个作业,以便在需要时通过查看更新的属性使其过期 包含如何运行作业的详细信息。有更简单的方法: ActiveRecord::SessionStore

Rails如何知道何时从sessions表中删除记录


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

据我所知,您必须提供自己的会话过期实现

给你一个很好的答案来解释它是如何工作的。您可以使用在上创建并在上更新的额外属性创建数据库表(并且可以免费获得时间戳),然后只需创建一个作业,以便在需要时通过查看更新的属性使其过期


包含如何运行作业的详细信息。

有更简单的方法:

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 12.hours.ago])
ActiveRecord::SessionStore::Session.delete_all([“更新时间<?”,12小时前])
您可以在控制器中执行某个操作后调用它,这段代码将杀死所有死会话

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


我真的很想异步地做类似的事情,比如从cronjob开始。这很好,通过rails runner和Everyone gem运行,使其成为cron作业。我们遇到了类似的问题,希望不通过cron运行它,所以我们正在试验MySQL事件:。希望这能帮助其他人遇到同样的事情。以下是更新的“完整故事”链接,将使用数据存储视为一种有争议的技术。在使用多个web服务器时,我们使用数据库存储进行会话。这是一个很好的解决方案,只要你保持过时的会话被清除,否则,它会膨胀得可怕。