在尝试在浏览器端实现 30 秒不活动后自动注销时,我们考虑创建一个 /heartbeat
端点:
- 当用户移动鼠标或键入任意键时,将在 10 秒后安排 JavaScript 回调,以调用
PUT/heartbeat
。 - 如果已经安排了回调,则前一个回调将被取消 - 这样做是为了避免当用户连续键入和/或移动鼠标时(例如在鼠标移动时)出现“雪崩”的
PUT/heartbeat
。编写内容)。 - 然后,每 60 秒发出一次
GET/heartbeat
- 检查自上次“更新”该用户 session 以来已经过去了多长时间。我们可以通过检查烧杯 session 表的内容来做到这一点。如果超过 30 分钟,端点会向 Javascript 返回适当的指示,以便用户在浏览器中自动注销。
这可以正常工作,除了一个小缺陷 - GET/heartbeat
更新烧杯 session 时间戳...
所以,问题是 - 在 Pyramid/Beaker 下,有没有办法创建一个不更新 session 时间戳的端点?
最佳答案
我最终所做的是创建了自己的 BeakerSessionFactoryConfig
以及 session_factory_from_settings
(实例化 BeakerSessionFactoryConfig
)。
然后我修改了您可以在此处看到的内容(调用 self.persist()
)https://github.com/Pylons/pyramid_beaker/blob/6a62134bf99ff8d0836ccc0f6be557b816fa9987/pyramid_beaker/init.py#L32是基于请求对象上是否设置了特定属性的条件操作。
这是有效的,因为只要不调用 .persists()
, session “上次访问”时间戳就不会在数据库(或您正在使用的任何其他存储)中更新。
关于python - Pyramid 烧杯 - 有没有办法创建不更新 session 时间戳的端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244326/