You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看Django中剩余的会话过期时间?

如何查看Django会话的剩余过期时间

问题原因解析

你当前的调用结果不符合预期,核心原因有两点:

  1. set_expiry(60)设置的是会话的绝对过期时长(从会话最后一次活跃时间算起),但你在视图中刚设置就休眠时,会话还未被保存到后端存储(数据库/缓存),get_expiry_age()只会返回你设置的初始值60,而非剩余时间。
  2. get_session_cookie_age()返回的是Django配置中SESSION_COOKIE_AGE的默认值(默认1209600秒,即2周),和你手动设置的会话过期规则无关。

可行解决方案

方案1:手动记录过期时间戳

在设置会话过期时,同步将过期时间戳存入会话,后续通过当前时间与该时间戳的差值计算剩余时间:

# views.py
from django.shortcuts import render
import time
from datetime import datetime, timedelta

def test(request):
    expiry_seconds = 60
    request.session.set_expiry(expiry_seconds)
    # 记录会话的过期时间戳(当前时间+过期时长)
    request.session['expires_at'] = (datetime.now() + timedelta(seconds=expiry_seconds)).timestamp()

    time.sleep(20)

    # 计算剩余时间(确保不出现负数)
    now = datetime.now().timestamp()
    remaining_seconds = request.session.get('expires_at', 0) - now
    print(max(0, int(remaining_seconds)))  # 输出约40

    return render(request, 'test/index.html')

注意:Django会在视图结束时自动保存会话,若需在视图中提前获取正确值,可手动调用request.session.save()。

方案2:从后端存储直接查询

若你的会话存储在数据库或缓存中,可直接查询存储的会话数据获取过期时间:

  • 数据库存储场景(SESSION_ENGINE = 'django.contrib.sessions.backends.db'):
from django.shortcuts import render
import time
from django.contrib.sessions.models import Session
from datetime import datetime

def test(request):
    expiry_seconds = 60
    request.session.set_expiry(expiry_seconds)
    request.session.save()  # 手动保存会话到数据库

    time.sleep(20)

    # 查询会话对象并计算剩余时间
    session_obj = Session.objects.get(session_key=request.session.session_key)
    expire_date = session_obj.expire_date
    remaining_seconds = (expire_date - datetime.now(expire_date.tzinfo)).total_seconds()
    print(max(0, int(remaining_seconds)))  # 输出约40

    return render(request, 'test/index.html')
  • 缓存存储场景:根据会话键从缓存中取出会话数据,解析其中的_session_expiry字段计算剩余时间(不同缓存后端的实现略有差异)。

关键补充说明

当会话已被保存到后端存储后,get_expiry_age()会基于当前时间和会话过期时间自动计算剩余时长,但前提是会话设置的是**临时过期(秒数)**而非固定过期日期。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:03:23