如何在 Django 中跟踪用户会话的长度
How to track the length of a user session in Django
有什么方法可以跟踪会话在 Django 中存在的时间长度?
有没有办法让 Django 运行 在会话过期时有一个函数?这将使我能够做到这一点。
谢谢!
正如@TimmyO'Mahony 所提到的,您可以使用 user_logged_out
信号来处理由于注销导致的会话结束。
您可以使用中间件来处理由于不活动而导致的会话过期。中间件可能如下所示:
import time
from django.contrib.auth import logout
SESSION_TIMEOUT = 5400 # 90 minutes
class HandleSessionExpiryMiddleware(object):
def process_request(self, request):
last_activity = request.session.get('last_activity')
now = time.time()
idle = now - last_activity if last_activity else 0
timeout = SESSION_TIMEOUT
if idle > timeout:
run_on_expiry()
logout(session)
else:
request.session['last_activity'] = now
idle = 0
def run_on_expiry(self):
# Custom code
假设以上代码在文件 sessions/middleware.py
中,您需要将此中间件添加到 settings.py
中的 MIDDLEWARE_CLASSES
,例如:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'sessions.middleware.HandleSessionExpiryMiddleware',
...
)
希望对您有所帮助!
有什么方法可以跟踪会话在 Django 中存在的时间长度?
有没有办法让 Django 运行 在会话过期时有一个函数?这将使我能够做到这一点。
谢谢!
正如@TimmyO'Mahony 所提到的,您可以使用 user_logged_out
信号来处理由于注销导致的会话结束。
您可以使用中间件来处理由于不活动而导致的会话过期。中间件可能如下所示:
import time
from django.contrib.auth import logout
SESSION_TIMEOUT = 5400 # 90 minutes
class HandleSessionExpiryMiddleware(object):
def process_request(self, request):
last_activity = request.session.get('last_activity')
now = time.time()
idle = now - last_activity if last_activity else 0
timeout = SESSION_TIMEOUT
if idle > timeout:
run_on_expiry()
logout(session)
else:
request.session['last_activity'] = now
idle = 0
def run_on_expiry(self):
# Custom code
假设以上代码在文件 sessions/middleware.py
中,您需要将此中间件添加到 settings.py
中的 MIDDLEWARE_CLASSES
,例如:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'sessions.middleware.HandleSessionExpiryMiddleware',
...
)
希望对您有所帮助!