谈谈对Cookie、Session、Token 的理解

        我们都知道http请求是无状态通信,请求完不保存任何信息,正如那句话,轻轻的走了,正如我轻轻的来,……不带走一片云彩。但是目前我们的系统是这样的吗?日常测试过程中是否遇到过清空一下浏览器缓存,清空一下cookie呢?那这些有什么用呢?接下来我们就开始揭秘吧。

        随着交互式(既可以浏览又可以发表评论、留言等等)Web的兴起,拿某社区网站举例,用户登录系统之后,接下来就是逛论坛、打赏、发帖等等,如果系统不记录用户的会话信息,那么登录后根本无法进行后续的操作,系统无法知道登录的用户是谁(http的无状态通信,登录完毕后就忘记用户是谁),为了解决这个问题,要么浏览器记录用户的一些相关信息,要么服务器记录一些用户相关信息, 随之Cookie 和Session应运而生.

Cookie是什么?其实就是由服务器发送到用户浏览器上的一小片数据,浏览器接收到这些信息并将其存储下来,待下次请求时一同发给服务器,这样做的目的即识别浏览器是否为同一个浏览器,记住无状态 HTTP协议的有状态信息,常用功能比如记录登录信息,当我们登录完某社区网站之后,Cookie 会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当我们逛论坛的时候,浏览器会自定在请求报文中加入Cookie值并发送给服务器。

谈谈对Cookie、Session、Token 的理解_第1张图片

        Session是什么?中文含义为会话,是服务端的会话技术,通俗来讲,就是与服务器建立通信时,服务器需要知道你是谁,服务器为了区分不同的客户端,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式保存在服务器上,当用户离开系统时Session会自动销毁,这种存储方式相较于cookie会更安全。现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据,比如我们直接访问某社区的论坛页面,系统会自动跳转到社区论坛的登录,即服务器没有收到用户的身份信息,只有登录后才能进行后续操作

       Token是什么,在Web系统中,常用作用户身份认证,在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,这样不仅增大了服务器的压力也增加了数据库的查询次数,为了解决这个问题Token被引入,Token是服务端生成的一串字符串,作为客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。

谈谈对Cookie、Session、Token 的理解_第2张图片

Cookie、Session的区别,上面的一些总结,想必大家也有一定的了解, Cookie、Session的不同点如下:其一,存储位置不同,Cookie存在于客户端,Session存在于服务端;其二,安全性上Cookie弱于Session;其三,单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;其四,Session一般通过Cookie传递或者url重写的方式

Session、Token的区别,在身份验证上没有本质的区别,作为身份认证 token安全性比session好,Session的传递有一定的限制;而token在服务器是可以不需要存储用户的信息的,token需要代码才能带上 ,而Session是由浏览器自动带上,最后, token可以不需要存储空间(JWT)(当然也有存入缓存的处理,特别是要进行revoke操作时),通过算法和密钥验证,而Session需要占用服务器的存储空间

你可能感兴趣的:(服务器,前端,html)