• 存储机制 cookie session jwt token


    cookie
    Cookie的诞生

    由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站。目前最新的规范是RFC 6265,它是一个由浏览器服务器共同协作实现的规范。

    Cookie的处理分为:

    服务器像客户端发送cookie

    浏览器将cookie保存

    之后每次http请求浏览器都会将cookie发送给服务器端

    session
    1. 为什么要有session的出现?
    答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的。如果要进行类似论坛登陆相关的操作,就实现不了了。

    2. session生成方式?
    答:浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;
    还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

    简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

     

    但是session和cookie 不适合大型开发,有集群和分布式的时候,因为请求另一台服务器因为之前的同源策略不一样所以会 力不从心,这种情况下会用到token,

    因为要在js里多写几行,在请求的内容里做身份验证,所以token来解决比session好,两者并不矛盾,可以避免同源策略,还可以支持移动端

    token
    概念: 访问资源的令牌

    验证流程:

    把用户的用户名和密码发到后端

    后端进行校验,校验成功会生成token, 把token发送给客户端

    客户端自己保存token, 再次请求就要在Http协议的请求头中带着token去访问服务端,和在服务端保存的token信息进行比对校验。

    特点:

    客户端每次都要携带token, 客户端的内容比较多

     

    JWT(可以实现单点登录)
    概念: JSON WEB TOKEN 的简写(是目前最流行的跨域认证解决方案)。可以使用在RESTFUL接口定义, 也可以使用在普通的web

    支持跨语言,便于传输,字节占用很小,

    私钥很重要:不要放敏感信息,客户端可以解密 ,尽量使用https协议 。

     

    组成:

    header

    在header中声明一些信息

    payload

    签证

     

    验证流程:

    在头部信息中声明加密算法和常量, 然后把header使用json转化为字符串

    在载荷中声明用户信息,同时还有一些其他的内容;再次使用json 把载荷部分进行转化,转化为字符串

    使用在header中声明的加密算法和每个项目随机生成的secret来进行加密, 把第一步分字符串和第二部分的字符串进行加密, 生成新的字符串。词字符串是独一无二的。

    解密的时候,只要客户端带着JWT来发起请求,服务端就直接使用secret进行解密。

    特点:

    三部分组成,每一部分都进行字符串的转化

    解密的时候没有使用数据库,仅仅使用的是secret进行解密。

    JWT的secret千万不能泄密!!!

     

    Token和JWT区别

    相同:

    1都是访问资源的令牌

    2都可以记录用户的信息

    3都是使服务端无状态化

    4都是只有验证成功后,客户端才能访问服务端上受保护的资源

     

    区别

    服务端验证客户端发来的token信息要进行数据的查询操作;需要验证

    JWT验证客户端发来的token 在服务端使用密钥校验就可以(校验使JWT自己实现的),不用数据库的查询。因为JWT包含了用户信息和加密数据

  • 相关阅读:
    java方法执行超时关闭
    PostGIS-将多面转换为单面(PostGIS
    deepin安装JDK
    Power Designer反向工程
    【Redis实操】twemproxy代理搭建
    mysql 一些语句
    利用insertd查出更新记录
    sqlserver 存储过程分页
    sqlserver存储过程分页记录
    js group by
  • 原文地址:https://www.cnblogs.com/wy919/p/12676564.html
Copyright © 2020-2023  润新知