cookie、session的应用与Django中间件介绍
作者:互联网
cookie、seesion的应用与Django中间件介绍
cookie与session简介
HTTP协议四大特性
1.给予请求响应
2.基于TCP、TP作用于应用层之上的协议
3.无状态
服务器端无法识别客户端状态的状态
1.互联网刚开始兴起的时候所有人访问网站都是一样的数据,服务器无法识别客户端,只是给出我这个该有的东西几乎不做交互
2.在之后的发展中互联网渐渐需要和人频繁交互并需要记住用户状态,那么仅仅做出内容就不太够使用了,需要与用户进行交互,但是每次交互如果都需要账号密码来登录的话,也会很烦,所以就诞生了coookie与session应运而生。例如:淘宝,京东,B站等一系列应用。
4.无连接
-
Cookie
- 由于HTTP协议是无状态的,每次请求都是独立的,他的执行情况和结果与前面的请求和之后的请求都没有直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况,但是我们会话中产生的数据又是我们需要保存的,也就是需要保持状态。所以就有了Cookie诞生。
- Cookie具体指的是一段小信息,他是服务端发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器就会自动携带这些键值对,以便服务器提取有用的信息。然后讲这些信息保存到本地,那么当我们再次访问时就会自动带上Cookie,这样服务器就能够通过Cookie的内容来判断这个是谁了
-
Session
- Session也是保存在服务端上跟用户信息状态相关的数据,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端那么就有了被拦截和窃取的风向,因此就需要一种新的东西,他可以保存更多的字节,并且保存在服务器,有较高的安全性,基于http协议的无状态特征,服务器根本就不知道访问者是谁。那么就需要Cookie来起到桥接的作用
- 我们给每个客户端的Cookie分配一个唯一的随机生成的id,这样用户在访问时通过Cookie来保存这个id那么就可以保存登录状态。
-
session的工作需要依存于Cookie就算是目前所有能够识别用户身份的网址也都需要使用cookie(客户端浏览器也有权拒绝保存cookie)
-
在隐私权与安全性选项中我们可以清除Cookie或者禁用,但是一般不建议去清除或者删除Cookie
-
我们也可以设置Cookie的保存时间,如果多长时间不去登录那么就会自动移除Cookie,Django默认的保存时间是两周,也就是十四天
django操作cookie
1.如果想让客户端浏览器保存Cookie那么就需要HttpResponse对象调用方法
return HttpResponse()
return render()
return redirect()
return JsonRepsibse()
设置Cookie需要变形
obj = HttpResponse()
obj.操作Cookie的方法
return obj
obj = render()
obj.操作Cookie的方法
return obj
obj = redirect()
obj.操作Cookie的方法
return obj
obj = JsonRepose()
obj.操作Cookie的方法
return obj
2.登录设置Cookie
3.多个视图函数都需要校验用户是否登录
装饰器
4.如何记住用户登录之前想要访问的页面,用户登录成功之后自动跳转
场景一:访问了其他需要登录才可以访问的页面 如何转跳>>>:想要访问的页面
场景二:用户直接访问登录页面 如何转跳>>>:网址首页
print(request.path)
print(request.path_info)
print(request.get_full_path())
Django操作session
1.请求在来之后服务端产生随机字符串并发送给客户端保存,服务端存储随机字符串与用户信息的对应关系,之后客户端携带随即字符串服务自动校验
2.Django默认的session失效时间为14天
3.客户端会自己而受到键值对,键默认是sessionid值是加密的随即字符串(令牌)
def set_session(request):
request.session['name'] = 'joseph'
return HttpResponse('设置session')
1.Django自动产生一个随即字符串返回给客户端(对name进行加密处理)
2.往dajngo_session创建数据(对joseph进行加密处理)
def get_session(request):
print(request.session.get('name'))
return HttpResponse('获取session')
1.自动从请求中回去sessionid对应的随机字符串
2.拿着随即字符串去django_session中匹配数据
3.如果匹配上还会自动解密数据并展示
4.session的存储位置可以有五种模式
数据库
缓存数据库
文件
缓存+数据库
加密
5.session其他操作
# 删除当前会话的所有Session数据
request.session.delete()
# 删除当前的回话数据邴珊初会话的Cookie
request.session.flush()
# 设置回话Session和Cookie的超时时间
request.Session.set_expiry(value)
如果value是个整数那么session会在有些秒数后失效
如果value是个datatime或timedelta,session就会在这个时间后失效
如果value是个0,那么用户关闭浏览器session就会失效
如果value是None,session会依赖全局session失效策略
Django中间件介绍
Django中间件类似于Django的门户,所有的请求来和响应走的时候都必须要经过中间件
Django默认自带七个中间件,也就是我们配置文件中的MIDDLEWARE = []内部的中间件,每个中间件都有各自负责的功能
Django中间件除了默认的之外还支持自定义中间件(无限个)
Django中间件的使用场景:
全局相关的功能:
全局用户身份证,全局用户黑名单校验,全局用户范文频率校验
Django中间件需要掌握的方法
Django自定义中间件中有五个方法:
process_request
process_response
process_view
process_template_response
process_exception
Django中间件需要了解的方法
1.process_request
1.请求来的时候会按照配置文件中注册了的中间件,从上往下依次执行每一个中间件里面的pricess_request方法,如果没有则直接跳过
2.该方法如果反悔了HttpResponse对象,那么请求不会再往后执行,原路返回
2.process_response
1.想赢走的时候会按照配置文件中注册了的中间件,从下往上执行每一个中间件里面的process_response方法,没有则直接跳过
2.该方法有两个形参request和response,并且默认情况下应该返回response
3.该方法也可以自己返回HttpResponse对象,相当于狸猫换太子
4.如果请求过程中,process_request方法直接反悔了HttpResponse对象那么会原地执行同级别的process_response方法返回
3.process_view
当前路由匹配成功之后,执行视图函数之前自动触发
4.process_excpyion
当视图函数报错之后自动触发
5.process_template_response
当视图函数返回的数据对象中含有render属性对应render函数才会被触发
标签:process,request,中间件,Django,session,Cookie 来源: https://www.cnblogs.com/joseph-bright/p/16686478.html