一、cookie
1、cookie简介
cookie是存储在浏览器的文本数据,大小不超过4kb,有一个名称和值,还有其他的一些属性组成,包括有效期,安全性,适用范围等,某些网站采用session机制识别用户身份,通常也会把sessionID存储到cookie中,发送网络请求的时候,cookie会在请求头里一起发送给服务端。主要用来解决http无状态这个问题。
2、使用时注意
1、需要在http请求里自动发送给服务器的数据可以放到cookie里,不需要的数据不应该放在cookie里 2、cookie存储在用户的硬盘里,所以需要保密的数据不能放在cookie里 3、cookie有容量限制,大约4kb,尽量避免存放大量数据 4、尽量后端实现
3、cookie使用
1 设置cookie #四件套之一 obj.set_cookie('key','value') 2 获取cookie request.COOKIES.get('key') 3 更新cookie #四件套之一 obj.set_cookie('key','value') 4 删除cookie obj.delete_cookie('is_login') 5 cookie的过期时间 -浏览器会管理cookie,到时间,它会自动删除,10s过期 -obj.set_cookie('key','value',expires=10) -如果不写,关闭浏览器,cookie就失效了 -obj.set_cookie('key','value') 6 对cookie进行加盐 obj.set_signed_cookie('nb','yes','123',expires=1000) 7 获取加盐的cookie nb=request.get_signed_cookie('nb',salt='123')
二、session
1、特点
基于cookie实现,存在当服务端(数据库),密文存储
2、流程
1、客户端先带着空cookie提交请求,在这个过程中,会随机生成字符串,名称为sessionID,将设置的session数据序列化加密,保存到数据库中 2、客户端带着存有sessionID的数据再次提交请求,先取出sessionID的值,然后通过数据库中获取数据,将数据解密并反序列化得到原来的数据
3、使用
#1 设置session request.session[key] = 'abc' request.session['is_login'] = True #2 获取session request.session.get(key) request.session[key] is_login=request.session.get('is_login') #3 更新session #四件套之一 request.session[key]='abc' #4 删除session del request.session[key] request.session.delete() # 删除数据库 request.session.flush() # cookie和数据库都删
三、token
1、token
主要用于验证身份,使用用户唯一ID + 系统时间 + 随机数 + 过期时间得到用户信息数据,对用户信息数据进行RSA非对称加密/AES对称加密得到一个加密字符串A,将加密字符串A再次进行签名等到一个签名数据。然后将签名数据和加密字符串进行拼接,最后使用base64进行编码,得到最终的token令牌。
2、流程
1.客户端使用用户名跟密码请求登录 2.服务器收到请求,去验证用户名和密码 3.验证成功后,服务端会签发一个Token,再把这个Token发送到客户端 4.客户端收到的Token以后可以把它存储起来,比如放在Cookie或LocalStorage里 5.客户端每次向服务器发送其他请求的时候都要带着服务器签发的Token 6.服务器收到请求,去验证客户端请求里面带着的Token,如果验证成功,就像客户端返回请求的数据
3、jwt
JWT标准的Token有三个部分:
- Header 声明类型,声明加密的算法
- Payload 公共的一些声明:签发者,过期时间,签发时间
- Signature 签证信息,由后端签发,secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证
三个部分会用点分割开,并且都会使用Base64编码,所以真正的Token看起来像这样
标签:request,Token,token,session,cookie,key,客户端 From: https://www.cnblogs.com/songyunjie/p/16878535.html