我使用此命令让用户登录:

def login_backend(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            request.session.set_expiry(300)
            return HttpResponseRedirect('/overview/')
        else:
            return HttpResponseRedirect('/login_backend/')
    else:
        return render_to_response('login_backend.html', context_instance=RequestContext(request))

我希望会话在5分钟后到期,因此我在上面的视图中添加了request.session.set_expiry(300).但会议永远不会到期.我做错了什么?

推荐答案

Update for Django 1.6

由于json可序列化,下面的中间件代码在Django 1.6及更高版本中不起作用.要使其在所有版本的Django中工作,请将会话序列化程序.

settings.py

#Handle session is not Json Serializable
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'

上面的序列化程序示例是针对Django 1.6的.请搜索其他版本.谢谢...

创建middleware.py

from datetime import datetime, timedelta
from django.conf import settings
from django.contrib import auth


class AutoLogout:
  def process_request(self, request):
    if not request.user.is_authenticated() :
      #Can't log out if not logged in
      return

    try:
      if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0):
        auth.logout(request)
        del request.session['last_touch']
        return
    except KeyError:
      pass

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

Update your settings.py个:

MIDDLEWARE_CLASSES = [
    .........................

    'app_name.middleware.AutoLogout', 
]

# Auto logout delay in minutes
AUTO_LOGOUT_DELAY = 5 #equivalent to 5 minutes

Django相关问答推荐

查尔而不是瓦尔查尔加盟Django 球场

__init__()获取了意外的关键字参数';id';

当使用django-tinymce时,我在哪里指定referer?

Django 中模型将数据存储在哪里?

Django Form标签和action属性

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

通过get_form_kwargs将请求传递给Django表单未能使表单访问self.request.user.

从url参数过滤的Django日期范围返回空查询集

在Django测试get方法中获取HttpResponseNotFound

在 Django Rest Framework 视图中,request.user 是在请求​​到达视图之前进行数据库调用还是数据库调用发生?

Django模型中的密码字段

初始填充 Django 表单

在生产中使用 Django 中的 SQLite?

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

在 Django 中使用 LiveServerTestCase 时使用代码登录

Django 应用程序运行良好,但收到 TEMPLATE_* 警告消息

django 应用基于条件的样式类

在 django 中获取空查询集的类名