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

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

【问题讨论】:

    标签: python django session timeout


    【解决方案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)"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多