Django-----cookie&session
Posted 磕伴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的详解与区别
以上是关于Django-----cookie&session的主要内容,如果未能解决你的问题,请参考以下文章