金字塔烧杯 - 有没有办法创建一个不更新会话时间戳的端点?

时间:2015-08-27 08:29:10

标签: python pyramid beaker

在尝试在30秒不活动后在浏览器端实现自动注销时,我们考虑创建/heartbeat端点:

  • 当用户移动鼠标或键入任何键时,会在10秒后安排javascript回调,以致电PUT /heartbeat
  • 如果已经安排了回调,则取消前一个回调 - 这样做是为了避免当用户输入和/或连续移动鼠标时(例如写入内容时)PUT /heartbeat的“雪崩”。 / LI>
  • 然后,每60秒发出一个GET /heartbeat - 检查自上次更新此用户会话以来已经过了多长时间。我们可以通过检查烧杯会话表的内容来做到这一点。如果超过30分钟,端点会向Javascript返回适当的指示,因此用户将自动在浏览器中注销。

这样可以正常工作,除了一个小缺陷 - GET /heartbeat更新烧杯会话时间戳......

所以,问题是 - 在Pyramid / Beaker下,有没有办法创建一个不更新会话时间戳的端点?

1 个答案:

答案 0 :(得分:2)

我最终做的是创建了自己的BeakerSessionFactoryConfig,以及session_factory_from_settings(实例化BeakerSessionFactoryConfig)。

然后我修改了你在这里看到的内容(对self.persist()https://github.com/Pylons/pyramid_beaker/blob/6a62134bf99ff8d0836ccc0f6be557b816fa9987/pyramid_beaker/init.py#L32的调用,它是一个条件操作,基于是否在请求对象上设置了某个属性。

这是有效的,因为只要.persists()未被调用,会话"最后一次访问"时间戳未在数据库中更新(或您正在使用的任何其他存储空间)。