python - Pyramid 烧杯 - 有没有办法创建不更新 session 时间戳的端点?

标签 python pyramid beaker

在尝试在浏览器端实现 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/

相关文章:

python - 如何将QListWidget setText位置更改为顶部?

python - 如何使用正确的转义将字节字符串转换为字符?

python - 使用 mingus python 模块限制声音输出

python - 你能把 Pyramid 钩成扭曲的,跳过 wsgi 部分吗?

python - 更改默认响应内容类型的正确方法

python - 在 Heroku 上使用 Memcache 时,我应该配置 Beaker 的 `session.lock_dir` 吗?

session - 基于 Memcached 的烧杯 session 未在 Zope 启动时初始化

python - 将 python 分析到固定的调用深度

python - 如何在 python Pyramid 应用程序中获取服务主机和端口?

python - Beaker 的 @beaker_cache 缓存在 Pylons 中的位置