目录
- 会话控制
- 一、会话Session
- 1.1 实现会话的几种方式
- 二、Cookie
- 2.1 cookie实现会话控制的原理
- 2.2 设置cookie
- 2.3 获取cookie
- 2.4 删除cookie
- 三、Session
- 3.1 session原理
- 3.2 Django中session说明
- 3.3 设置Session
- 3.4 获取Session
- 3.5 删除Session
- 四、Base64编码工具函数
- 五、拓展
会话控制 ? 网络中网页之间进行内容传输使用的协议是http协议
? http协议是一种无状态,所有请求必有回应的超文本传输协议,HTTP 为了提高效率,一经完成请求和响应的过程后,就会自动关闭连接 。所谓无状态意指:基于http协议提供服务的服务端,无法清晰前后多此请求过程中,是不是同一个客户端发送的还是多个客户端发送的 。
? web开发的应用往往只是一个网页或者是一个功能,那么怎么这么多页面不同的请求,识别用户之前的状态和行为?
? 为了能在多次请求的过程中,识别客户端是否是同一个客户端,所以就出现了会话跟踪技术,就需要使用会话控制技术,也叫会话保持或者会话跟踪技术
? 会话控制术,主要作用是为了识别和记录用户在web应用中的身份行为和操作历史 。
一、会话Session ? 所谓一次会话其实就是客户端和服务端之间进行通信的一次完整过程
? 在web开发领域:
客户端和服务端之间产生的会话开始于:在用户第一次输入url访问网站的时候? 注意:如果移动端下面,则必须是关闭当前app应用才算结束会话,如果只是后台运行,会话并没有结束
客户端和服务端之间的会话结束于:关闭浏览器(如果服务器宕机了也属于会话结束,只要是两者断开联系都属于会话的结束)
? 所以,会话跟踪技术就是在一次完整的会话中,能让服务端识别客户端在整个过程中的身份行为和操作历史的一项技术
1.1 实现会话的几种方式 实现会话控制的几种技术类型:
- url地址栏记录用户身份的参数(少见,很古老的技术)
- cookie:在浏览器中由浏览器自动读写保存用户信息的一种小文件,能够存储的数据有限,10M左右(已过时,谷歌在2021年正在逐步关闭cookie技术)
- session:在服务端中保存用户信息的一种小文件,能够存储的数据有限,根据服务端配置而定
- token令牌:就是一段可以记录和识别用户身份的字符串,通过客户端语言(js/Android/IOS)保存在客户端中的一项技术
2.1 cookie实现会话控制的原理
2.2 设置cookie ? 在子应用user下创建视图并建立路由映射关系,并在主应用下的urls.py下进行引入
? 其中,视图函数如下:
from django.http.response import HttpResponsedef setcookie(request):""" 设置cookie """response = HttpResponse('ok')response.set_cookie(key='name', value='https://tazarkount.com/read/Abo', max_age=30)return response - response.set_cookie:就是设置cookie
- 参数说明:
- key:cookie的名称
- value:cookie的值(其实只是众多值的一部分,)
- max_age:有效时间,单位秒
- expires:过期的时间戳(与max_age都是设置cookie的生命周期)
- 参数说明:
def getcookie(request):""" 获取cookie """"""因为cookie是由浏览器自动保管的,所以一旦客户端浏览器存在当前域名的cookie,在每次客户端发起请求的时候,浏览器都会自动的把cookie附加在请求头里面"""print(request.COOKIES)return HttpResponse('ok') 2.4 删除cookie ? 视图函数def delcookie(request):""" 删除cookie """"""因为cookie是保存在客户端中的数据,因此在服务端并没有直接删除cookie的方法,所以一般的删除cookie操作都是通过设置当前变量的值为任意值,同时设置当前变量的有效期为0这样浏览器接收到响应信息之后,就会自动删除了"""response = HttpResponse('ok')response.set_cookie('sid', '', max_age=0)return response 如果需要批量删除:def delcookie(request):""" 删除cookie """"""因为cookie是保存在客户端中的数据,因此在服务端并没有直接删除cookie的方法,所以一般的删除cookie操作都是通过设置当前变量的值为任意值,同时设置当前变量的有效期为0这样浏览器接收到响应信息之后,就会自动删除了"""response = HttpResponse('ok')for cookie in request.COOKIES:response.set_cookie(cookie, max_age=0)return response 三、Session ? 这里的Session就是会话控制技术的一种,session主要保存在服务器的文件中? 在没有进行设置的情况下,session以文件编码格式保存,一般保存的目录是系统的缓存文件存储目录
? 例如:windows的
C:/windows/temp目录,Linux/Mac OS 的/tmp目录因为session是在服务端中保存数据,相比较而言比cookie更加安全,但是因为用户的数据都是保存到服务器中,当用户基数大了,则服务器的存储压力就来了,所以一般不会考虑把session数据保存在文件,而是采取保存到第三方存储session的方案,例如保存到redis中或者mysql之类的数据库里面3.1 session原理
3.2 Django中session说明 ? Django2.0以后的版本默认采用了数据库保存session,这主要是为了适应当前市场上大部分公司开发项目时采用
分布式服务器集群而调整的,但是我们目前还没有介绍django数据库操作,所以我们可以先根据官网说明,把session保存到文件中? settings.py配置:
"""Session 配置项:django.contrib.sessions.backends.file:保存到文件django.contrib.sessions.backends.db:保存到数据库django.contrib.sessions.backends.cache:保存到缓存"""SESSION_ENGINE = 'django.contrib.sessions.backends.file'"""session存储目录(如果不设置,则默认保存到系统的缓存目录)3.0之后:SESSION_FILE_PATH = BASE_DIR / "session_path"# 路径拼接"""# # 目录需要提前手动创建SESSION_FILE_PATH = BASE_DIR / "session_path" 3.3 设置Session def set_session(request):""" 设置session """print(request.session)request.session['uname'] = 'root'request.session['uid'] = 10001return HttpResponse('ok') 3.4 获取Session def get_session(request):""" 获取session """print(request.session.items())# 获取全部print(request.session.get('uid'))# 获取单个return HttpResponse('ok') 3.5 删除Session def del_session(request):""" 删除session """try:request.session.pop('uid')# 删除单个,如果没有会报错except Exception as e:print(e)request.session.clear()# 删除全部sessionreturn HttpResponse('ok') 四、Base64编码工具函数 ? Base64是网络上最常见的用于传输8bit字节码的编码方式之一? Base64就是一种基于64个可打印字符来表示二进制数据的方法 。
? 64个可打印编码字符就是小写字母a-z、大写字母A-Z、数字0-9、符号’+’、’/’(再加上作为垫字的’=’,实际上是65个字符)
? base64的使用一般无非就是编码和解码:
- 编码是指从二进制到编码字符的过程,可用在HTTP环境下传递较长的标识信息,例如:图片内容
- 解码就是从编码字符到二进制的过程
五、拓展 【【Django3.2学习】04-会话控制】? 除了base64这个python内置库之外还有其他一些内置库或是第三方库用于转存数据,如:pickle、struct、ujson、orjson等,虽然python内置库json库有对json数据处理相关操作,但是效率并不高,ujson效率会高很多,而orjson效率会更高除此之外还有像itdangerous对字符串进行编码、解码等相关操作,这里不再进行扩展,可自行了解 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
