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

Zab*_*bba 5 session ruby-on-rails-3

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

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

Dzm*_*try 7

有简单的方法:

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 12.hours.ago])
Run Code Online (Sandbox Code Playgroud)

您可以在Controller中的一些Action之后调用它,这段代码会终止所有死会话.

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

全文


Chr*_*ber 3

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

这个 API 页面为您提供了一个关于其工​​作原理的相当不错的答案。您可以使用额外的属性created_on和updated_at创建数据库表(并且您可以免费获得时间戳),然后您只需创建一个作业,通过查看up​​dated_at属性随时使它们过期。

这篇文章详细介绍了如何运行作业。