ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cookie、session的应用与Django中间件介绍

2022-09-12 16:31:34  阅读:346  来源: 互联网

标签:process request 中间件 Django session Cookie


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有