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

Django中会话为何被意外保存?(多案例合并场景)

Django 4.2.3会话保存异常问题

我参照Django官方文档中「会话何时保存」的内容,以及自己在Stack Overflow的回答,完成了Django会话保存/不保存的常规实验,但遇到了一个异常情况:

场景1:合并执行4个案例

第一次运行以下代码:

# views.py
from django.http import HttpResponse

def test(request):
    # 案例1
    request.session["foo"] = "bar"
    
    # 案例2
    del request.session["foo"]

    # 案例3
    request.session["foo"] = {}

    # 案例4
    request.session["foo"]["bar"] = "baz"

    return HttpResponse('Test')

第二次运行代码查看会话:

# views.py
from django.http import HttpResponse

def test(request):
    print(request.session.get('foo')) # 输出:{'bar': 'baz'}
    return HttpResponse('Test')

发现案例4的会话修改被意外保存了。

场景2:分步骤执行

第一次运行前3个案例:

# views.py
from django.http import HttpResponse

def test(request):
    # 案例1
    request.session["foo"] = "bar"
    
    # 案例2
    del request.session["foo"]

    # 案例3
    request.session["foo"] = {}

    return HttpResponse('Test')

第二次单独运行案例4:

# views.py
from django.http import HttpResponse

def test(request):
    # 案例4
    request.session["foo"]["bar"] = "baz"

    return HttpResponse('Test')

第三次运行代码查看会话:

# views.py
from django.http import HttpResponse

def test(request):
    print(request.session.get('foo')) # 输出:{}
    return HttpResponse('Test')

此时会话并未保存案例4的修改。

额外说明

  • 未使用request.session.modified = True强制标记会话修改
  • settings.py中已设置SESSION_SAVE_EVERY_REQUEST = False

请问为何合并执行所有案例时,案例4的会话修改会被意外保存?


内容的提问来源于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.07.16 16:03:25