Cookie与Session想必大家都听说过,但也许对他们之间有什么区别却不要太了解,那么今天我们就来了解一下它们之间到底有什么联系。
1.Http
在介绍Cookie与Session之前,我们先来了解以下Http。
HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。
可是怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。因为Http是无状态xie'yi也就是说对于服务器而言它无法记住上次访问过他的客户端,如果客户端每次访问服务器都需要再次重复第一次的验证那么是十分消耗时间的,于是在此基础上Cookie就诞生了。
2.Cookie
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。其实客户端在向服务器发送请求时服务器会创建一个对应的Session来管理该客户端的信息(前面提到的服务器不认识客户端与服务器中没有该客户端的信息是两回事,不要搞混了),之后向客户端返回一个SessionId而我们的Cookie就是用来保存SessionId的容器,之后我们就可以给服务器发送Cookie用来快速定位其对应的Session。该过程可以类比为哈希表中的查找,我们利用key来找到对应的value。但是Cookie不是仅仅只能用来作为key来寻找value,同时Cookie本身就可以储存信息,也就是说Cookie本身也可以作为value存储在客户端浏览器上。
3.Session
上面我们讲到服务端执行Session机制时候会生成sessionId并将这个id值发送给客户端。客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是Cookie。同时如果我们对于每个客户端都创建对应的Session而不去销毁的话那么是十分的占据空间的,所以说如果某个客户端一段时间(有些服务器默认是30分钟,这个并不固定)没有给服务器发送请求,那么服务器就会删除其对应的Session。同样的如果我们在客户端(也就是浏览器)中禁用了Cookie那么Session也就不能正常地被使用了。
4.Cookie与Session的区别
1.Cookie是保存在客户端的,Session保存在服务器
2.Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session
3.Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用Cookie
4.单个Cookie在客户端的限制是3K,就是说一个站点在客户端存放的Cookie不能超过3K