Django-----cookie&session
cookie
保存在用户浏览器端的一个键值对(别人给的凭证)
服务端可以向用户浏览器写cookie
客户端每次发请求会携带cookie去(放在请求头里面)
淘宝的cookie 京东的cookie(http的连接很简单,是无状态的,为了登录后下次来还认识,也为了避免再次登录)
功能:1.一段时间内免登录 2.浏览器自动记住账号密码 3.修改每次看的页数(只用修改一次)
禁用浏览器的cookie(无限投票例子)
用户第一次请求时候后端处理代码

def login(request): if request.method=="GET": return render(request,'登录界面') else: user=request.POST.get('username') pwd=request.POST.get('password') print(user,pwd) if user=='akagi' and pwd== '521': obj=redirect('用户后台') #obj.set_cookie('ticket','sdfasdas',max_age=10,path='/')#max_age=10 十秒后cookie失效 里面的path属性指定这个cookie内容在哪个url生效 obj.set_signed_cookie('ticket','19438',salt='jjjjjj',max_age=10)#cookie加密(签名)需要做异常处理 解密解密p57 #set_cookie(self, key, value='', max_age=None, expires=None, path='/', # domain=对域名划分sso, secure=https相关, httponly=安全相关js代码无法获取到, samesite=??): return obj else: return render(request, '登录界面')
后端会检查用户请求的时候是否带有相关的cookie,有则通过再做其他操作,无则返回登录界面

def classes(request): try: #tk=request.COOKIES.get('ticket') #自定义名字 tk=request.get_signed_cookie('ticket',salt='jjjjjj') #=加密时候salt要对应 签名 except KeyError: return redirect('/login/') #print('tk=',tk) if not tk: return redirect('/login/')
session(推荐)
保存在服务器端的数据(本质是键值对)
应用的时候依赖于cookie
作用:保持会话( Web网站)
好处:敏感信息不会直接给客户端(cookie容易被伪造,即使签了名也能被破解,因为数据在浏览器端)
原理:用户请求,返回一串随机字符串,然后服务端也保存这个随机字符串为key,一个字典为value(里面可以记录各种数据)
用户第一次请求时候后端处理代码

def session_login(request): if request.method=='GET': return render(request,'session.html') else: u=request.POST.get('user') p=request.POST.get('pwd') obj=models.UserAdmin.objects.filter(username=u,password=p).first() if obj: #1.生成随机字符 #2.通过cookie发给客户端 #3.服务端保存(随机字符串1,{'username':'qwe',} ;下次验证两端各一份) 对应cookie里面的sessionid #(数据,类似键值对 放到数据库表里面了) request.session['username']=obj.username #做三件事123 键值对 request.session['password'] = obj.password #随着增加的键值对越多,数据库session_key不变,session_data变长 request.session['email'] = 'love@qq.com' request.session.set_expiry(5) #设置失效时间 # * 如果value是个整数,session会在些秒数后失效(适用于整个Django框架,即这个数值时效时整个页面都会session失效)。 #* 如果value是个datatime或timedelta,session就会在这个时间后失效。 #* 如果value是0,用户关闭浏览器session就会失效。 #* 如果value是None,session会依赖全局session失效策略。 return redirect('/indexxx/') else: return render(request,'session.html',{'message':'请重新登录'})
对session验证

def indexxx(request): #1.获取客户端cookie种的随机字符串 #2.去session种查找有没有随机字符 #3.去session中查看对应key的value中是否有值 v=request.session.get('username') #获取session里面key为username的value s=request.session.session_key b=request.session.values() print(s) if v: return HttpResponse('ok,登录成功:%s---%s----%s' %(v,s,b)) else: return redirect('/session_login/')
PS:
DJANGO 设置SESSION过期时间
cookie和session的详解与区别
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术