Skip to main content
 首页 » 编程设计

python之如何在 Django 中跟踪用户 session 的长度

2024年08月26日33artech

有没有一种方法可以跟踪 session 在 Django 中存在的时间长度?

有没有办法让 Django 在 session 过期时运行一个函数?这将使我能够做到这一点。

谢谢!

请您参考如下方法:

正如@TimmyO'Mahony 所提到的,您可以使用 user_logged_out 由于注销而处理 session 结束的信号。

您可以使用中间件来处理由于不活动而导致的 session 过期。中间件看起来像:

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 中,您需要将此中间件添加到 MIDDLEWARE_CLASSES在你的settings.py喜欢:

MIDDLEWARE_CLASSES = ( 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'sessions.middleware.HandleSessionExpiryMiddleware', 
    ... 
) 

希望这对您有所帮助!