状态保持全景笔记之session (概念 → 流程 → 代码 → 有效期 → 删除,一条龙)
【摘要】 状态保持全景笔记之session (概念 → 流程 → 代码 → 有效期 → 删除,一条龙) 一、两个必须记住的点Session 数据保存在服务器(内存 / Redis / 数据库)。Session 必须依赖 Cookie——浏览器端只存一把“钥匙”(SessionID)。 二、为什么离不开 Cookie把敏感信息直接放浏览器(Cookie)不安全;把信息锁在服务器后,需要给浏览器一把“钥...
状态保持全景笔记之session
(概念 → 流程 → 代码 → 有效期 → 删除,一条龙)
一、两个必须记住的点
-
Session 数据保存在服务器(内存 / Redis / 数据库)。
-
Session 必须依赖 Cookie——浏览器端只存一把“钥匙”(SessionID)。
二、为什么离不开 Cookie
-
把敏感信息直接放浏览器(Cookie)不安全;
-
把信息锁在服务器后,需要给浏览器一把“钥匙”才能取;
-
这把钥匙就是 SessionID,存于 Cookie,每次请求自动携带。
三、完整交互流程(第一次 → 第二次)
Session 简版流程
-
登录成功后,服务器生成一个 随机 SessionID(如
a1b2c3
)。 -
把
a1b2c3 -> {"user_id":1001,"username":"alice"}
存 Redis。 -
把
sessionid=a1b2c3
写回浏览器 Cookie。 -
以后浏览器每次自动带
Cookie: sessionid=abc123
,服务器查 Redis 即得完整用户信息,无需再存 Cookie 明文。
四、Django 代码 3 步完成
# 1. 设置 Session(登录成功)
def set_session(request):
request.session['uid'] = 1001
request.session['name'] = 'alice'
return HttpResponse('已登录')
# 2. 读取 Session(任意页面)
def get_session(request):
uid = request.session.get('uid', 0)
name = request.session.get('name', '游客')
return HttpResponse(f'欢迎 {name}')
# 3. 删除 Session(退出登录)
def del_session(request):
request.session.flush() # 清当前用户所有 Session
return HttpResponse('已退出')
五、有效期设置
方式 | 代码 | 说明 |
---|---|---|
全局默认 | settings.py SESSION_COOKIE_AGE = 3600 |
默认 30 分钟 |
手动延长 | request.session.set_expiry(0) |
浏览器关闭失效 |
手动延长 | request.session.set_expiry(3600) |
1 小时 |
六、调试 2 个命令
-
浏览器 → F12 → Application → Cookies → 查看
sessionid
。 -
服务器 →
python manage.py shell
from django.contrib.sessions.models import Session
Session.objects.all().count() # 当前活跃 Session 数量
七、一句话总结
“Session 把用户数据锁在服务器保险柜里,Cookie 只负责递钥匙;钥匙丢了(Cookie 被禁用),保险柜就打不开。”
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)