cookie和session是什么?

CSDN博客地址:https://blog.csdn.net/superDE009/article/details/102821116

一,cookie

cookie是在http访问时保存在客户端一个由服务器设置的属性,用于储存客户在上一次请求后的必要数据,以便下一次访问时减少不必要的操作。
cookie的运行流程:
这里使用投票例子,为了防止客户重复刷票,限制每个用户只能投一票,所以在用户投完票后,将投票成功的信息储存在cookie中,在下一次该客户端访问时,服务器读取cookie后便回拒绝客户端的投票
具体流程:

  • 客户端访问服务器,进行一次投票
  • 服务器在背投票后,服务器使用set-cookie的http头,在客户的cookie中写入一个投票完成的文本信息,
  • 客户端携带cookie重新访问,
  • 服务器读取cookie得知客户端已经进行投票,便拒绝客户端投票。

但是
cookie有一个十分致命的漏洞,就是它的安全性,如前文所说,cookie是储存在客户端的文本信息,那么也就是说客户可以任意改动其中的信息,来伪造自己的身份等信息。就如上文中的投票系统来说,用户完全可以在投完票后删除自己的cookie,并再一次访问服务器进行投票。所以cookie是十分不安全的,只能用于储存一些不重要的信息,如链接状态等。

二,session

既然cookie是存放在本地的,从而十分容易被用户篡改,使得服务器信息泄露。
那么如果我们将客户cookie中的信息储存在服务器端呢,
这就是session
session指的是当客户在访问服务器后,提交了一些信息,需要服务器暂时存放,以便之后继续递交信息。
这时,服务器会为这个客户端开辟出一小段内存,用来存放这些信息。每一段内存都互相隔离,用户们不能访问其他用户的session。
可是,服务器有这么多客户端,该如何分辨哪个seesion是哪个客户端的呢?
其实,服务器在创建session的同时,也会生成一个特定的标记来标记该用户,如一个session-id=001,存放在用户的cookie中,当下一次客户机带着session-id的cookie来访问时,服务器就能通过客户端的session-id来判断属与它的session了。
那么话又说回来,既然cookie是不安全的,那么session-id不也是可以修改的了吗?
事实上,是的,客户可以通过修改自己的session-id来访问其他的用户的session。
所以,其实session也是一个不安全的方法,虽然cookie中的session-id可以被加密,但是,在真实环境中,使用session意味着服务器要为用户开辟大量内存,那么当用户量大的话,服务器的内存很快就会被消耗完,更别是还要使用加密了。
而且,session的使用会将http服务从一个无状态服务变成一个有状态服务,从而让服务器的架构扩展变得十分困难。

小结

知道了Cookie与Session,我们来做一些简单的总结:
1、Cookie可以存储在浏览器或者本地,session只能存在服务器
2、Session比Cookie更具有安全性
3、Session占用服务器性能,Session过多,增加服务器压力
4、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie


发表评论

邮箱地址不会被公开。 必填项已用*标注