简述cookie和session机制

首先来说说HTTP协议,我们知道HTTP协议是无状态的,意思就是说我们每一次发出的HTTP请求之间都是没有关联的,对于服务且而言,就算是同一个人在不停的发出HTTP请求访问网页,服务器也不知道是同一个人在访问。

但是在很多网页中都涉及到了登录注册的功能,用户登录后,就算请求该网站的其他页面,服务器也都会知道是你这个用户,从而返回相应的网页给你。但是前面说到了HTTP协议是无状态的,那么这是怎么实现的呢?这就是使用了cookie和session的机制。

如何要让无法识别你的服务器变得能够识别你,思考一下,貌似可以用一个标记来告诉服务器访问的是你。

下面来介绍cookie和session的机制。

cookie是客户端用来保存用户信息的机制。我们想象一下,如果我们注册一个账号之后,在服务端就会保存我们的账户和密码。我们登录了之后,如果我们将账户和密码都放在cookie中,每次访问的时候都将这个cookie携带上,那么服务器端就去寻找对应的用户,如果找到了表示该用户是登录状态的,并返回相应的页面,这样不是就实现了保持登录状态的功能了吗?

这样在功能上是没有问题的,是可以实现的,但是存在一个很大的问题,那就是安全性!我们知道cookie是保存在客户端的,也就是我们本地的终端上,比如手机,电脑。而手机和电脑的安全性相对服务器而言是不太安全的,因为手机和电脑很有可能遗失或者中病毒等等状况,如果你的cookie被其他人获取到了,那么你的账号信息就泄露了。

针对这种安全性的问题,我们引入了session的概念,session是服务端用来保存用户信息的机制。当用户在登录了账户后,服务端会将用户信息加密保存在session当中,同时随机生成一个session_id与该session相关联,然后在服务端返回页面给客户端的时候,一并将该session_id返回给客户端,客户端通常将session_id保存在cookie中,每次请求的时候,只需要携带这个cookie就相当于携带上了session_id,服务端会自动根据session_id找到相应的用户,这样就实现了保持登录状态(保持会话)的功能,而在我们退出登录后,服务端的session以及对应的session_id就会被删除掉。同时session也是有过期时间的。

对于服务端而言,保存session的方式有多种,可以存在文件当中,可以存在数据库当中,也可以存在内存当中。

下面来说下cookie和session的区别:

  • cookie数据存储在客户端,session数据存储在服务端
  • session相对cookie更加安全
  • 当访问用户增多时,session会更多的消耗服务器的性能
  • 单个cookie保存的数据不能超过4K,而session没有限制
     
发布了49 篇原创文章 · 获赞 10 · 访问量 9233

猜你喜欢

转载自blog.csdn.net/heibuliuqiu_gk/article/details/103477794