• cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?


    HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢?
    设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑了,浏览器里记录的信息就会很危险, 即使我们自己不需要亲自输入用户名密码,浏览器还得想办法帮我们在每一次请求里加入用户名密码,这项技术就是cookie
    cookie的基本流程:浏览器发起HTTP请求,服务器会进行cookie设置,也就是set-cookie,cookie发给浏览器之后,浏览器会保存起来,这样浏览器以后发送的每一个请求都会自动附上这个cookie,我们打开浏览器是可以看到保存了哪些cookie,也就是说如果把用户名和密码放在cookie是很不安全的,只要电脑被黑,在cookie里的重要信息就会被泄漏,于是就有了新的技术session
    如果有多台服务器,一台服务器存储了sessionid,又面临需要分享session id给其他服务器
    jwt json web token
    http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html(阮一峰)
    header.payload.signature
    算法 特定数据(有效期) 签名
    使用方式
    方式一
    放在HTTP请求头信息的Authorization字段,使用Bearer模式添加JWT
    方式二
    放在post请求的数据体里
    方式三
    通过url传输
    生成的token客户端以cookie或者storage的方式进行存储,cookie需要解决跨域问题
    token和jwt的区别
    token:服务端验证客户端发送过来的token时,还需要查询数据库获取用户信息,然后验证token是否有效
    jwt:将token和payload加密后存储于客户端,服务端只需要使用密钥解密进行校验即可,不需要查询或者减少查询数据库,因为jwt自包含了用户信息和加密的数据。
    如何保证token在客户端的安全性?
    header和payload的信息会被base64编码,虽然jwt不保存在服务器这里,但是服务器需要保存一段密码,这段编码需要结合着两段编码进行算法运算,最终得到签名信息。这里使用的算法就是刚刚header声明的算法,签名的信息也就是signature部分了,这样一个完整的jwt就可以发给客户端了
    如何解决跨域问题?
    nginx代理跨域
    nginx反向代理,通过配置一下参数
    在go中,跨域中间件也是通过配置请求头参数

  • 相关阅读:
    解析java中的String类中的常用方法(三)
    白酒:中国的酒文化的传承与发扬
    CyberController手机外挂番外篇:源代码的二次修改
    servlet 引用src目录下子目录的class文件方法
    谷粒商城 高级篇 (四) --------- Elasticsearch-Rest-Client
    广东MES系统实现设备管理的方法与功能
    全志V3S嵌入式驱动开发(开发环境再升级)
    /usr/bin/ld: cannot find -lmysqlcllient
    从零创建Docker用基础镜像 - CentOS7.9 x86_64
    DytanVO 代码复现(服务器端复现rtx3090)
  • 原文地址:https://blog.csdn.net/m0_49049914/article/details/125470566