0

如果用户在 Web 应用程序上没有任何活动,我想注销会话。目前,我已经实现了自定义中间件以在配置的时间间隔内注销。

在我的应用程序中,需要每 2 秒进行一次连续轮询。但是,在我的自定义中间件类中,每次执行轮询时都会调用“def process_request(self,request)”。

因此,会话永远不会注销,因为此轮询也被视为用户活动。

现在,我如何区分用户不活动和轮询?

代码:

从 django.utils.deprecation 导入 MiddlewareMixin

from django.contrib.auth import logout from django.contrib import messages from datetime import datetime, timedelta from django.contrib import auth

从 django.conf 导入设置

class CustomMiddleware(MiddlewareMixin): def process_request(self, request): if not request.user.is_authenticated : #如果没有登录就不能注销 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()

设置.py:

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' AUTO_LOGOUT_DELAY = 1

4

0 回答 0