首页 > 其他分享 >cookie,session,token

cookie,session,token

时间:2022-11-10 19:51:18浏览次数:49  
标签:request Token token session cookie key 客户端

一、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

相关文章