You need to enable JavaScript to run this app. Django如何在后续请求中获取前序请求设置的session数据?
优惠活动
大模型
产品
解决方案
定价
更多

Django如何在后续请求中获取前序请求设置的session数据?

Django 跨请求读取session的实现原理

你修改request.session后能在后续请求读到值,本质是Django内置的SessionMiddleware在请求全链路自动完成了数据持久化、Cookie写入的工作,不需要你手动操作response对象。
整个完整流程如下:

  • 请求进入Django后,SessionMiddleware会优先于视图函数执行:它先从用户请求携带的Cookie中读取sessionid,去你配置的session存储后端(默认是Django自带的django_session数据库表)查询对应的数据,封装成可读写的request.session对象注入到请求中,再交给你的视图函数处理。
  • 你在视图中对request.session做的赋值、修改过期时间等操作,只会先修改这个内存对象的状态,不会立刻写入持久化存储。
  • 视图执行完毕返回响应对象(就是你代码中最后return的res)后,SessionMiddleware会执行后置处理逻辑:
    1. 自动检测request.session是否发生了修改,将最新的session数据同步写入持久化存储
    2. 如果是新生成的session(比如匿名用户第一次访问站点),会自动把新的sessionid通过Set-Cookie响应头写入你返回的响应对象里,用户浏览器会自动保存这个Cookie。
  • 下次用户刷新页面发起新请求时,浏览器会自动把当前域名下保存的sessionid放在请求Cookie中携带,SessionMiddleware就可以通过这个id查询到之前存储的session数据,封装到新请求的request.session对象里,你自然就能读到之前设置的username值了。

你虽然没有手动操作响应对象写Cookie、存session,但这些通用操作都被SessionMiddleware封装了,这也是Django session能力的核心设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:30:05