Django Session机制详解:原理、配置与实战示例

橘子海
橘子海
发布时间:2026-10-13 | 6人浏览过
原创

本文深入解析Django框架中Session的工作机制,阐述其基于Cookie的服务器端数据存储原理。详细列举了Session的增删改查操作方法及过期时间设置策略,并通过短信验证码发送与校验的完整代码示例,展示如何在实际项目中高效利用Session管理用户状态。

Session的基本概念

一、Session的基本概念

Cookie与Session的核心区别在于数据存储位置:Cookie将键值对数据保存在浏览器客户端,而Session则将数据保存在服务器端。Session的运行依赖于Cookie机制:启用Session后,服务器会在客户端Cookie中生成并存储一个唯一的sessionid。每次客户端发起请求时,浏览器会自动携带该sessionid发送至服务器。服务器接收到请求后,依据此sessionid在服务器端查找并匹配对应的Session数据,从而识别用户身份。

Django框架中的Session应用

二、Django框架中的Session应用

Session键值对数据的存储方式

Session键值对数据的存储方式

在Django项目中,Session数据默认持久化存储于一张名为django_session的数据库表中。其具体存储格式结构如所示。

Session的数据操作方法

三、Session的数据操作方法

写入Session数据时,采用键值对格式进行赋值操作。

request.session['键']=值

读取Session数据时,可通过指定的键名获取对应的值。


request.session.get('键',默认值)
# 或者
request.session['键']

清除所有Session数据时,执行clear()方法,该操作会在存储介质中删除Session的值部分,但保留Session记录本身。

request.session.clear()

彻底清除Session数据时,执行flush()方法,该操作会从存储介质中删除该Session的整条记录。

request.session.flush()

删除Session中特定的键值对时,使用del语句,该操作仅从存储介质中移除指定的键及其对应的值,不影响其他Session数据。

del request.session['键']

配置Session数据的有效期。若未显式设置,系统默认过期时间为两周。具体设置规则如下:

request.session.set_expiry(value)

  • 当value参数为整数时,Session数据将在该数值指定的秒数内无活动后自动过期。
  • 当value参数为None时,会话将设置为永不过期。
  • 当value参数为0时,用户会话的Cookie将在用户关闭浏览器时立即过期。

实战代码示例

四、实战代码示例


# 发短信接口
def sms_send(request):
 # http://localhost:8000/duanxin/duanxin/sms_send/?phone=18434288349
 # 1 获取手机号
 phone = request.GET.get('phone')
 # 2 生成6位验证码
 code = aliyunsms.get_code(6, False)
 # 3 缓存到Redis
 #cache.set(phone,code,60) #60s有效期
 #print('判断缓存中是否有:',cache.has_key(phone))
 #print('获取Redis验证码:',cache.get(phone))
 #暂时用session处理
 request.session['phone'] = code
 request.session.set_expiry(300) #设置5分钟后过期
 print('判断缓存中是否有:', request.session.get('phone'))
 print('获取session验证码:',request.session.get('phone'))
 # 4 发短信
 result = aliyunsms.send_sms(phone, code)
 return HttpResponse(result)
# 短信验证码校验
def sms_check(request):
 # /duanxin/sms_check/?phone=xxx&code=xxx
 # 1. 电话和手动输入的验证码
 phone = request.GET.get('phone')
 code = request.GET.get('code')
 # 2. 获取redis中保存的code
 #print('缓存中是否包含:',cache.has_key(phone))
 #print('取值:',cache.get(phone))
 #cache_code = cache.get(phone)
 #获取session里的code
 print('取值:', request.session.get('phone'))
 cache_code = request.session.get('phone')
 # 3. 判断
 if code == cache_code:
 return HttpResponse(json.dumps({'result':'OK'}))
 else:
 return HttpResponse(json.dumps({'result':'False'}))

总结

总结

以上内容详细介绍了Django框架下Session的使用方法及注意事项,旨在帮助开发者更好地掌握这一技术,期望对各位读者有所助益。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表