【问题标题】:Logging users out of a Django site after N minutes of inactivity在 N 分钟不活动后将用户从 Django 站点注销
【发布时间】:2011-02-02 02:31:04
【问题描述】:

我正在开发一个网站,该网站要求我们在 N 分钟不活动后将用户注销。有没有使用 Django 的最佳实践?

【问题讨论】:

    标签: python django authentication


    【解决方案1】:

    尝试将 settings.SESSION_COOKIE_AGE 设置为 N * 60 秒。

    http://docs.djangoproject.com/en/dev/ref/settings/#session-cookie-age

    【讨论】:

      【解决方案2】:

      查看session middleware 及其设置。特别是这两个:

      SESSION_COOKIE_AGE

      默认值:1209600(2 周,以秒为单位)

      会话 cookie 的年龄,在 秒。

      SESSION_SAVE_EVERY_REQUEST

      默认值:假

      是否保存会话数据 每一个请求。如果这是 False (默认),那么会话数据将 仅在已修改时才保存 -- 也就是说,如果它的任何字典值已被分配或删除。

      设置较低的SESSION_COOKIE_AGE 并打开SESSION_SAVE_EVERY_REQUEST 应该可以创建“滑动”到期。

      【讨论】:

        【解决方案3】:

        在 django 会话中间件中设置会话 cookie 年龄只是在传回浏览器的 set-cookie 标头中设置过期时间。只有浏览器遵守强制“注销”的到期时间。

        根据您需要空闲注销的原因,您可能认为浏览器对到期时间的合规性不够好。在这种情况下,您需要扩展会话中间件。

        例如,您可以在会话引擎中存储到期时间,并根据请求进行更新。根据您网站的流量性质,您可能希望在 X 秒内只回写一次会话对象,以避免过多的数据库写入。

        【讨论】:

        • 这在 Django 1.4 中似乎不是真的。我从服务器取回的 Set-Cookie 头是这样的:Set-Cookie=csrftoken=... sessionid=365ede0dd7038cc70796f9f724bc21b6; httponly; Path=/ 它没有过期时间,所以必须在服务器端强制执行过期。
        • 很高兴会话中间件得到了改进。我不确定我应该如何处理当时准确的答案。
        • 我认为保留您的答案很好,因为它在撰写本文时是正确的。
        • @Nathan:啊,我已经阅读了更多内容,在 Django 1.4 中有一个使用 cookie 的新会话后端。但是,在您的情况下,没有到期时间的 cookie 是 Session Cookie,在浏览器关闭时应将其删除。在这种情况下,Django 不一定会执行任何形式的“空闲注销”。
        猜你喜欢
        • 2011-08-04
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        • 2021-02-06
        • 1970-01-01
        • 2016-04-13
        相关资源
        最近更新 更多