2

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

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

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

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

4

1 回答 1

2

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

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

这是有效的,因为只要.persists()不调用,会话“上次访问”时间戳就不会在数据库(或您正在使用的任何其他存储)中更新。

于 2015-08-27T11:15:43.143 回答