Django Session机制详解:原理、配置与实战示例
本文深入解析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的使用方法及注意事项,旨在帮助开发者更好地掌握这一技术,期望对各位读者有所助益。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













