cookie,session,token到底是啥?

为什么会有这些会话机制

        1.http协议是无状态的。也就是说每次与服务器进行连接,都必须重新发送请求。连接一次,请求一次。上次和这次的连接没有任何关系。底层的TCP连接会断开,用户的ip地址可能会发生变化。但是浏览器又需要记录访问者。

        2.判断浏览器需要去判断一下,两次的请求是否是同一个人的请求。这时我们就需要进行身份验证来判断。

cookie

        1.cookie:是web服务器发给用户浏览器的一段数据,浏览器记住这个数据,在用户对于后期的操作进行一定的身份验证。cookie相当于服务端发给用户的身份凭证。如果攻击得到了用户的cookie值,相当于得到了用户身份使用cookie是为了对数据的保护。在浏览器可以十分方便看见cookie,所以cookie对于用户来讲是完全公开的

        2.cookie的特点

                a.Cookie存储在客户端(浏览器),发送请求时自动携带放在请求头中。

                b.单个Cookie保存的数据不能超过4KB。

                c.Cookie的安全性不高,别人可以分析存放在本地的Cookie并进行Cookie欺骗。

                d.Cookie默认不可跨域,可通过特殊的操作如:设置withCredentials属性为true实现跨域。

        3.cookie的主要属性

                a.domain:用于指定cookie在哪些域名中生效。访问什么域名的时候发生这一个特定的cookie

                b.path:cookie的生效路径,只有这个域名或者这个域名的子域名才能访问这个cookie

                c.expires:设置cookie的有效期,到期后,浏览器自动删除。如果为none,关闭浏览器临时cookie直接删除。有些网站避免用户麻烦,选用“永久性”cookie不安全。设置有效期的cookie可以使cookie在有效期内不被删除。

                d.httponly:大多数情况下,cookie只需要和服务端进行交互,并不需要让客户端js读取。当允许的时候增加了cookie泄露的风险。httponly让cookie只能使用http/https传输,使js无法读取到cookie

                e.secure:使cookie只会在https请求时发送给服务器,没有加密的http无法发送这个cookie

                f.samesite:

                        1.none:不做限制,什么情况都可以发送cookie

                        2.lax:一般情况下跨站请求不发送cookie,但点击连接发送cookie,提交表单,get提交表单带cookie,post一般不带

                        3.strict:完全禁止跨站请求使用cookie,点击站外连接也不发送cookie。url的域名属于同一个站点发送cookie(一般没有)

                g.smaeparty:将企业的多个网站,允许企业定义一个可信站点集合

        4.使用cookie

                1.客户端发送请求到服务端

                2.服务端收到请求生成session会话

                3.服务端响应客户端,在响应头中设置set-cookie,其中包括一个重要的信息sessionid,一一对应。

                4.客户端下次使用cookie,浏览器在请求头中自动加上cookie

                5.客户端发送其他,也会携带cookie

                6.服务端收到了请求,并且验证cookie信息,是否存在sessionid,存在且一一对应则可以正常响应

session

        1.session

                在cookie中提到了sessionid用于确定用户认证,一般情况下session由服务端创建,保存在服务器,客户端和服务端之间的认证使用sessionid确认。如果在服务端包含sessionid,表示客户端和服务端之前硬已经创建过了session,去查看session,如果没有找到则可以创建一个新的session,并且sessionid和session一一对应。把sessionid发送到客户端存放在cookie中,如果找到了对应的session则验证通过。

        2.session的特点

                a.session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。

                b.session 可以存储任意数据。

                c.session 有效期都比较短。

                d.session 存储空间比较大。

        3.使用session

                a.客户端发送请求

                b.服务端创建session,将唯一标识sessionid设置在set-cookie响应中,放在客户端

                c.客户端发送请求携带cookie,通过sessionid到服务端进行验证

                d.正确响应

token

先抓一下包看看token

        1.token

                是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次请求后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可。(不会由cookie-session那么大的内存消耗)通过这种方式服务器端就不需要保存 Session 数据了,只用在客户端保存服务端返回给客户的 Token 就可以了。

        2.token的特点

                a.Token不需要存储用户信息,节约了内存,token签发后存储在客户端,不占用服务器资源,可减轻服务器压力

                b.由于不存储信息,客户端访问不同的服务器也能进行鉴权

                c.Token可以采用不同的加密方式进行签名,提高了安全性。比如由uid+time+sign进行加密算法

                d.每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里

        3.使用token

                a.客户端发出请求

                b.服务端验证请求是否正确

                c.验证成功,服务端发送token给到客户端

                d.客户端把token存储起来

                e.客户端再次发送请求,带上token

                f.验证成功,返回数据

总结

        cookie是服务器端生成发送给客户端在客户端保存的

        session是放在服务器端来和客户端的cookie做匹配的

        Token存储在客户端,不占用服务器资源,可减轻服务器压力

        归根结底,cookie,session,token的作用是在浏览器上保存用户的登录态,其实就是实现用户在网页上登录过一次后,一段时间内再次访问不需要重新登录,会实现自动登录的一个效果。具体使用什么方式,主要是看什么情况,具体的情况使用具体的会话方式。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值