cookie, session, token

cookie 指的就是浏览器里面能永久存储的一种数据

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

Session

服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。

服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

Token

在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。

使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

cookie分为setCookie和Cookie,前者为响应头字段,后者为请求头字段;而请求头和响应头均包含Session ID,响应头包含的Session ID字段是为了记录用户认证状态,请求头中Session ID是方便服务端来判断客户端是否为真实的用户。接下来我们详细看下两者的区别:

1.session在服务器端,cookie在客户端(浏览器)

2.session默认被存在在服务器的一个文件里(不是内存)

3.session的运行依赖session id,而session id 是存在cookie 中的,也就是说,如果浏览器禁用了cookie ,同时session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

Cookie

  cookie是访问网站时,由网站服务器返回的一种标记为cookie 类型数据,存储在浏览器的上,以后每次访问本完整,浏览器都会在http请求中将该数据发送过来

Cookie作用

   目前Cookie最广泛的是记录用户登录信息,这样下次访问时可以不输入自己的用户名、密码了

   当然了这种方便也存在用户信息泄密的问题,尤其在多个用户公用一台电脑时很容易出现这样的问题。

Session会话 

 1. 当登录成功后,session第一次被创建,一个唯一的标识被存储于本地的cookie中的sessionid中。

 2. 再次打卡浏览器后回去数据库查session的id去比对

弊端:

  从数据库中的session的读取会导致网站性能慢,影响数据库水平扩容等,从而产生了Token

Token 

   Token包含数据信息(data)和验证信息(HMAC)的整体数据结构,放在http协议里返回给客户端

   数据信息改变,验证信息也会跟着改变,存储在客户端,不需要对数据库的访问

猜你喜欢

转载自blog.csdn.net/wsl_cnxw/article/details/85164113