浅谈 cookie token session

1.它们的作用

        每当客户端每一次与服务端进行通信(发送请求)时,都要与服务端重新链接,但是下一次请求与上一次请求是没有关系的。这是 HTTP 协议是无状态的特性。而因为不同次请求时无关系的,为了方便判断发出两次请求的是不是同一个人,cookie token session就为此而生即解决客户端标识的问题 。

2.cookie

     1.cookie 是啥

        浏览器中的cookies意思是指服务器暂存放在你的电脑里的txt格式的文本文件资料,主要用于网络服务器辨别电脑使用。比如浏览网站时,Cookies记录下来你输入的一些资料和信息。当再访问同一个网站,就会依据Cookie里的内容来判断使用者,送出特定的信息内容给你。

        比如用户在一个页面完成登录,登陆完成后后端会生成一个 sessionid 并把它放在 cookie 中返回给客户端,并且服务端一直记录着这个 sessionid,每当客户端向服务端发送请求后都会带上这个 sessionid 。而服务端就依靠这个 sessionid 来判断请求者的身份。(http无状态,浏览器每次请求会携带 cookie 在请求头中)

     2.限制条件

        ①cookie 有存储大小限制,4KB 左右。

        ②默认有跨域限制,不可设置跨域共享 cookie,不可设置跨域传递 cookie

        ③字符编码为 Unicode,不支持直接存储中文。

        ⑥数据存储在客户端,容易被窃取和截获

3.session

      1.session 是啥

        与cookie一样,也是为了存储用户相关的信息

        不同的是cookie存储在客户端,session存储在服务器

        存储在服务器的数据会更加安全,不容易被窃取

      2.与 cookie 的联动

        ① 用户登录,服务端会为用户生成一个 session ,同时分配一个的 sessionId ,后面服务端就可以根据这个 sessionid 来判断到他到底是哪个用户,然后将此 sessionid 通过 cookie 传给浏览器

        ② 之后用户在浏览器的每次发送每一次请求时,服务器都会检查该请求里面是否包含 sessionId 标识,如果包含了 sessionId,则表示服务端之前已经和客户端创建过 session,然后就通过这个 sessionId 去查找真正的 session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session 对应,然后在响应的时候将 sessionId 放在 cookie 中给客户端。

     3.限制条件

        ①Session每次工作时依赖cookie,如果当浏览器不适配cookie,或者发生跨站请求时,Session就无法工作了。

        ②Session如果存储在服务器内存中,则会占用大量服务器资源

        ③Session如果存储的数据库中,则可以解决分布式部署多个服务器间session共享和同步问题,但是如果数据库挂了,则所有分布式服务器的session认证都会失败,所以数据库也要集群部署,这意味着一份session需要被复制到多个数据库中。

        ④Session认证机制,本质是基于用户名和密码的认证机制,服务器需要取出session中保存的用户名和密码,去和数据库中的用户名和密码进行对比,每次session认证都需要进行一次数据库查询。

4.token

    1.token是啥

         当客户端向服务端发送请求时,服务端会生成的一串字符串,这个字符串可以作为客户端进行请求的一个标识。 所以当用户第一次登录后,服务器生成一个 token 并将此 token 发送给客户端,每当客户端需要请求数据时,客户端只需带上这个 token 向服务端来请求数据即可,无需再次带上用户名和密码。

   2.token的字符串

        这个字符串是被加密后的字符串,它通常使用 uid(用户唯一标识)、时间戳(当前时间的时间戳)、签名(签名token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)以及一些其它参数加密而成。反之,我们也可以将 token 进行解密从而拿到 uid 等一些的信息。

5.总结

特点优点缺点
cookie

1.存储在客户端。2.请求自动携带 cookie。3.存储大小为 4KB。

1.兼容性好且很方便,因为 cookie 会自动携带和存储。1.需要解决跨域问题,若有多台服务器如何共享 cookie。2.易遭受 CSRF 攻击。3.存储在客户端,不安全。
session1.存储在服务端。2.存储大小无限制。1.查询速度快,因为是个会话,相当于是在内存中操作。2.结合 cookie 后很容易实现鉴权。3.安全性好,因为存储在服务端。1.存储在服务端,还有每个客户端都会创建各自的 session 且都存着各自的所有信息,易耗费服务器资源。
token1.体积很小。2.可自由存储在任意地方。1.安全性好,因 token 一般只有用户 id。2.消耗服务器内存资源很少,它几乎只存了用户 id.3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。1.查询速度慢,因 token 只存了用户 id,每次需要去查询数据库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值