状态保持全景笔记之session (概念 → 流程 → 代码 → 有效期 → 删除,一条龙)

举报
周杰伦本人 发表于 2025/08/31 20:40:31 2025/08/31
【摘要】 状态保持全景笔记之session (概念 → 流程 → 代码 → 有效期 → 删除,一条龙) 一、两个必须记住的点Session 数据保存在服务器(内存 / Redis / 数据库)。Session 必须依赖 Cookie——浏览器端只存一把“钥匙”(SessionID)。 二、为什么离不开 Cookie把敏感信息直接放浏览器(Cookie)不安全;把信息锁在服务器后,需要给浏览器一把“钥...

状态保持全景笔记之session

(概念 → 流程 → 代码 → 有效期 → 删除,一条龙)

一、两个必须记住的点

  1. Session 数据保存在服务器(内存 / Redis / 数据库)。

  2. Session 必须依赖 Cookie——浏览器端只存一把“钥匙”(SessionID)。


二、为什么离不开 Cookie

  • 把敏感信息直接放浏览器(Cookie)不安全;

  • 把信息锁在服务器后,需要给浏览器一把“钥匙”才能取;

  • 这把钥匙就是 SessionID,存于 Cookie,每次请求自动携带。


三、完整交互流程(第一次 → 第二次)

Session 简版流程

  1. 登录成功后,服务器生成一个 随机 SessionID(如 a1b2c3)。

  2. a1b2c3 -> {"user_id":1001,"username":"alice"} 存 Redis。

  3. sessionid=a1b2c3 写回浏览器 Cookie。

  4. 以后浏览器每次自动带 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 个命令

  1. 浏览器 → F12 → Application → Cookies → 查看 sessionid

  2. 服务器 → python manage.py shell

from django.contrib.sessions.models import Session
Session.objects.all().count()   # 当前活跃 Session 数量

七、一句话总结

Session 把用户数据锁在服务器保险柜里,Cookie 只负责递钥匙;钥匙丢了(Cookie 被禁用),保险柜就打不开。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。