天天看点

理解cookie和session的作用、联系与区别

前言:我们知道Http协议是无状态的。无状态的意思就是Http协议对于处理的事务是没有记忆功能的。最常见的例子就是当一个用户浏览商品添加购物后,他关闭了浏览器,然后重新进行登录准备下单,那么这时候服务端就不知道这次请求下单的与上次添加购物车的是否是同一个人。辨别用户身份是非常重要的,那么Cookie、Session和token就有这一层作用。

一、Cookie

       当我们第一次使用浏览器在某网页去输入用户名和密码登录账号后,会给出一个弹框,提示我们是否要保存我们的用户名和密码,一般会给出两个选项【保存】和【一律不】如下图所示。

理解cookie和session的作用、联系与区别

       其实这个提示要我们保存的就是cookie信息。

       Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向服务器再次发起请求时被携带并发送到服务器上。它用来告知服务端两个请求是否来自同一个浏览器,简单来说就是用来识别用户身份。

       正如上图所见,Cookie保存着用户的用户名和密码,另外cookie还能设置过期时间、保存路径、有效期等信息。通过设置有效期可以长期或者暂时将信息保存在浏览器上。

二、Session

       Session与Cookie类似。不过Cookie是保存在客户端的,Session是保存在服务端的。 Session是会话级别的,它会在用户会话中一直存在下去,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。

       用户向服务端发送请求时,服务器会生成一个唯一的session ID,而这个session ID会被存储在cookie中,当用户请求数据时,会将session ID一同提交到服务器,通过与服务端session ID对比来判断是否时同一个用户的请求。一般来说cookie和session需要配合使用。

三、对比

       1.由于cookie保存在客户端,有可能会被人篡改或窃取,它存在一定的安全隐患(一般情况下,浏览器会对cookie进行一些限制,提高cookie的安全性),session是保存在服务器端的所以安全性更高一些,所以我们可以把一些重要信息用session来存储;

       2.cookie可以设置保存时间,会在有效期内一直保存;而session是会话级别的,会话结束,session也相应被清楚;

       3.单个cookie保存的数据一般小于4kb,并且一般一个站点最多保存20个cookie;而对于session来说没有限制,但是由于session保存在服务器端,session不宜过大,会影响服务器端的性能;

       4.cookie中通常保存的是字符串;session中能存储任何数据类型的数据;

       5.cookie中如果设置了路径参数,那么同一网站中不同路径下的cookie互相是访问不到的;session不能区分路径,同一用户在访问一个网站期间,所有session在任何一个地方都可以访问到。