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

如何为Django特定页面设置不同会话时长?定时请求能否保活?

Django长编辑页面的会话维持方案

关于仅让该页面拥有"无限"会话时长的实现

由于全局SESSION_COOKIE_AGE无法修改,没法直接给单个页面设置真正的无限会话时长,但可以通过持续主动刷新会话的方式,模拟出该页面会话永不失效的效果——只要用户停留在这个页面,就定期让Django更新会话的过期时间。

每隔5分钟发送请求的方案完全可行

这种前端定时请求的方式是维持会话活跃的标准方案,只要后端正确处理请求,就能成功刷新会话有效期,具体实现步骤如下:

1. 后端实现会话刷新视图

在你的Django项目中新增一个简单的视图,用于接收前端的刷新请求并更新会话过期时间:

from django.http import JsonResponse
from django.contrib.auth.decorators import login_required

@login_required
def refresh_session(request):
    # 手动标记会话已修改,触发Django更新session cookie的过期时间
    request.session.modified = True
    return JsonResponse({'status': 'success'})

然后在urls.py中配置对应的路由:

from django.urls import path
from .views import refresh_session

urlpatterns = [
    # 其他路由...
    path('refresh-session/', refresh_session, name='refresh_session'),
]

2. 前端添加定时刷新脚本

在编辑器页面的模板中,加入以下JavaScript代码,每隔5分钟发送一次请求到上面的视图:

<script>
// 每隔5分钟(300000毫秒)发送一次会话刷新请求
setInterval(() => {
    fetch('{% url "refresh_session" %}', {
        method: 'POST',
        headers: {
            'X-CSRFToken': '{{ csrf_token }}',
            'Content-Type': 'application/json'
        },
        credentials: 'include' // 确保携带session cookie
    })
    .then(response => response.json())
    .catch(err => console.log('会话刷新失败:', err));
}, 300000);
</script>

注意事项

  • 必须携带CSRF令牌:因为用了POST请求,所以要在请求头里带上X-CSRFToken,避免Django的CSRF拦截
  • 会话修改标记:后端必须设置request.session.modified = True,否则Django不会主动更新session cookie的过期时间(只有会话数据实际变化时才会自动更新)
  • 测试验证:可以临时把SESSION_COOKIE_AGE改成60(1分钟),停留在编辑器页面,看1分钟后是否还能正常保存内容,以此验证方案是否生效

内容的提问来源于stack exchange,提问作者Kodeeo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:18