如果用户在 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