Django中sessions与Cookie的区别及会话、Cookie管理用户故事编写求助
一、Django中Cookie与Session的核心区别
- 存储位置:Cookie为客户端存储,保存在用户浏览器的本地文本文件中;Session为服务端存储,默认存于Django项目配置的数据库/缓存/文件中,仅在客户端Cookie中留存无意义的唯一
sessionid标识。 - 容量限制:单域名下Cookie总容量上限为4KB,最多可存储20~50个Cookie;Session存储容量由服务端配置决定,无明确硬上限。
- 安全属性:Cookie存储于客户端易被窃取、篡改,不可直接存储密码、用户身份等敏感信息;Session内容仅在服务端可见,仅对外暴露
sessionid,安全等级更高。 - 有效期逻辑:Cookie可配置持久化有效期,关闭浏览器后仍可保留至过期时间;Django默认Session随浏览器会话结束失效,也可通过
SESSION_COOKIE_AGE参数自定义持久化时长。 - 访问控制:Cookie可通过
domain、path参数限制可读取的站点范围;Session为用户维度隔离,仅持有对应sessionid的用户可访问对应内容。
二、Session与Cookie管理模块常用用户故事参考
用户故事统一采用「作为<角色>,我希望<功能需求>,以便<业务价值>」的通用格式:
普通用户维度
- 作为站点普通访问者,我希望登录后关闭浏览器再打开时可选择保留登录状态,无需重复输入账号密码,简化访问操作。
- 作为注重隐私的用户,我希望可以手动清理站点存储在本地的所有Cookie数据,避免我的浏览行为被站点追踪。
- 作为多账号使用者,我希望退出登录后我的所有会话数据会被彻底清除,后续其他人使用同一设备无法访问我的账号信息。
站点管理员维度
- 作为站点管理员,我希望可以查看指定账号的当前活跃会话列表,可手动终止异常登录的会话,保障用户账号安全。
- 作为站点管理员,我希望可以配置全站会话的最大有效期,避免用户长期不操作依然保持登录状态带来的安全风险。
- 作为站点管理员,我希望可以限制单个账号同时在线的最大会话数量,避免账号被恶意分享滥用。
开发运维维度
- 作为后端开发,我希望可以自定义Session的存储介质(数据库/Redis缓存等),可根据站点流量调整会话存储的读写性能。
- 作为后端开发,我希望可以快速配置Cookie的
HttpOnly、Secure、SameSite安全属性,降低XSS、CSRF攻击带来的Cookie泄露风险。 - 作为运维人员,我希望系统可自动清理过期的Session数据,避免服务端存储资源被无效数据占用。
三、Django中Cookie与Session常用操作示例
- 设置Cookie:
response.set_cookie('key', 'value', max_age=3600, httponly=True) - 读取Cookie:
request.COOKIES.get('key') - 删除Cookie:
response.delete_cookie('key') - 设置Session:
request.session['key'] = 'value' - 读取Session:
request.session.get('key') - 销毁当前用户所有Session:
request.session.flush()
内容的提问来源于stack exchange,提问作者Hom Prasad Dhakal
相关产品推荐
相关产品推荐

