如何在 django 中设置会话永不过期

Posted

技术标签:

【中文标题】如何在 django 中设置会话永不过期【英文标题】:How can I set session never expire in django 【发布时间】:2015-05-28 18:57:44 【问题描述】:

我正在使用 Django-Python。有没有办法设置会话永不过期?

【问题讨论】:

【参考方案1】:

从 Django 1.4(及更高版本)开始,您还可以通过在设置文件中设置 SESSION_COOKIE_AGE 来设置会话的持续时间。

SESSION_COOKIE_AGE

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

会话 cookie 的年龄,以秒为单位。

【讨论】:

【参考方案2】:

我不知道无限会话,但如果您使用会话中间件 并使用大量的 AUTOLOGOUT 时间,它会起作用。

100 年听起来好吗?

在 settings.py 上

# time in minutes
# 60min*24hours*365days*100years
AUTO_LOGOUT = 52560000

创建一个中间件并将其添加到中间件部分的settings.py中

from datetime import datetime, timedelta
from django.conf import settings
from django.contrib import auth
from django.utils.translation import ugettext as _

class AutoLogout:

    def process_request(self, request):

        if not request.user.is_authenticated():
            # Can't log out if is not logged in
            return
        try:
            # last click
            last_touch = datetime.strptime(request.session['last_touch'], "%Y-%m-%d %H:%M:%S.%f")
            # getting auto logout time
            auto_logout_time = settings.AUTO_LOGOUT

            try:
                if datetime.now() - last_touch > timedelta(0, auto_logout_time * 60, 0):
                    del request.session['last_touch']
                    auth.logout(request)
                    request.session['warning'] = unicode(_("You have been logged out"))
                    return
            except Exception as e:
                # It should not reach this point
                auth.logout(request)
                del request.session['last_touch']
                request.session['warning'] = unicode(_("You have been logged out"))

        except KeyError:
            pass

         request.session['last_touch'] = str(datetime.now())

【讨论】:

我将使用默认超时,2 周。无论如何,谢谢。 52560000s == 1.67 年我想你忘记了 60 倍。 @yspreen 自动注销以分钟为单位。因此,如果您想在 30 分钟不活动后退出,您只需输入 30 而不是 1800。 @yspreen 之后分钟将转换为秒 -- "if datetime.now() - last_touch > timedelta(0, auto_logout_time * 60, 0)"

以上是关于如何在 django 中设置会话永不过期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中设置和获取会话变量?

如何在 Django 会话模型中设置自定义字段?

如何在 ktor 中设置会话超时?

如何在django中设置会话超时?

如何在 Laravel 5.1 中设置 JWT Token 的过期时间

在 SessionStore 而不是 cookie 中设置 Node.js Express 会话过期时间