cookie、session、token。

无论是cookie、session还是token,它们都是为了提高用户体验而产生的技术,都是为了保存用户登录状态与服务端建立会话。最早期先有cookie,因为保存在客户端不安全,所以有了保存在服务端的session,又因为服务器的空间存储问题(seesion保存在服务器的内存或磁盘文件中)所以又有了保存在客户端的Token。

为什么用它们?

早期访问网站的时候不会记录用户的登录信息,当我们再次访问该网站的时候又要重新输入账号密码进行登录,因为我们发送的数据是经过http协议封装之后由Tcp协议传输的,当关闭浏览器时相当于断开了连接,而下次登录就要重新登录,是不是很麻烦?从用户角度来讲,当然不希望网站这样做,希望的是当我登陆过一次这个网站的时候,下次登录可以直接登录,而不需要输入用户名和密码,至少在短时间内可以不用输入用户名密码重新登录网站。有没有什么方法可以实现这个技术?

cookie就此运用而生,cookie是保存在客户端的一小段字符串(根据客户端的不同一般为3k或4k),当用户登录过完一个网站之后,就将这个用户的信息保存在客户端(可以是账号、密码、浏览过的网页信息等等),这个过程是服务器操作的。当用户再次访问该网站的时候,就可以从cookie(每个网站都有自己的cookie信息,当访问网站的时候就从客户端将该网站的cookie信息封装在请求里面,带给服务器)里面取出用户的信息,完成自动登录。

但是,cookie有一个最大的缺陷,不安全。不加密就不说了,加密之后的数据也可能通过解密而获取到(一点都不要怀疑黑客的能力)。所以在cookie中只能保存不隐私的东西,比如访问网站次数,浏览过网站的信息(网站可以根据浏览过的信息为你推送一些感兴趣的东西),最多保存一下用户名。但是密码就属于比较隐私的信息了。如果这些数据泄露,有可能对用户造成极大的损失。有没有什么办法解决cookie不安全的问题?

seesion就此运用而生,session可以将用户登录信息保存在服务器的上,将用户登录信息保存在服务器总比保存在个人电脑上要安全的多的多,毕竟服务器相对于个人电脑而言是安全的多的。当用户第一次访问网站的时候,将用户的登录信息保存在服务器上,并生成一个sessionId返回客户端将其保存在cookie中(sessionid是唯一的,标识服务器与当前用户的唯一会话),当用户再次访问该网站的时候,就会拿着sessionid寻找到用户保存在服务器的登录信息,接着就可以进行验证完成自动登录。

cookie是写在客户端上的一小段字符串,如果没有指定声明周期,那它就持久化到了一个txt文件中,那session是存储在服务器上的,那它应该存储的哪里?

1.存储在内存中,这种方式不好的一点就是,当服务器宕机或者重启或者断电,session都会消失掉。另外如果访问量剧增,那么内存开销增大,服务器可也能超负荷,这种方式有很多弊端。

2.持久化到数据库中,我们可以将session存储到数据库中,这样就不会在不可控的情况下丢失session,降低用户的体验。尤其是在登录注册的时候。那这种方式也有弊端,每次有用户访问的时候,都要去数去库超找session,获取用户信息,在空间时间上都加大了对数据库的负重,这个时候可以做缓存来减少数据库的操作,从而提高服务器的性能。

这个时候用户访问过程:发送包含cookie的请求→服务端接受请求,从请求中获取sessionid→如果没有sessionid就创建,如果有就从数据库中查找session数据,获取用户的信息→进行自动登录。

session实际上是将用户信息又做了一次持久化,我们的数据库之中肯定是要有管路用户的表的,这样对session持久化之后加大了内存和数据库的开销。为了减少服务器的负荷,同时保存用户的登录状态,我们可以使用token。

token相当于自定义session。token可以当做是在管理用户的表中添加了一个字段信息,这个字段用来存放token,它代表着服务器与该用户的唯一会话。当用户第一次访问服务器的时候,会生成与该用户的唯一token,将用户信息和token进行关联保存在数据库中,它表示着服务器与该用户会话的唯一标识。再次访问服务器的时候,token就会通过请求带过来,接着服务器就拿着token找到用户的登录信息,接着完成自动登录。

token是不是和sessionid很像?,其实上就是以前需要在session中取得的用户信息数据现在从数据库的用户信息中获取,减少了数据库的负荷。

总结:

cookie:保存在客户端的一小段字符串,主要用来存放一些对用户无关紧要的信息。但不安全。

session:存储在服务端内存中的用户信息,每有一个用户登录就会产生一个session,主要表示当前用户登录状态,是否登录。但内存消耗较大。

token:相当于自定义session,存放在客户端的表示用户登录状态的唯一标识。安全并且减少了服务器内存的占用,可以通过是否有token看用户是否登录,也可以通过token查找到用户登录信息完成自动登录。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值