cookie是一种面向客户端存储机制
session是一种面向编程面向服务器的存储
首先要知道,他们两个机制不是两连的,他们都是分开的机制,不是使用cookic就必须有session,这是初学者的一个误区。
大家接触过http协议相关服务的应该会有更深入的理解
1.什么是cookie?
cookie它的核心功能就是存储,当我们浏览器去访问服务器的时候,会产生一定cookie来存储到本地,当我们再次去访问服务器的时候,就会带上我们的请求网站和cookie一同去发送给我们的服务器,并且在返回请求的时候,会告诉浏览器增加或者删除某些cookie内容
这里我们需要注意cookic的几点特性:
1.安全问题:浏览器存储cookie时是使用的明文来进行保存的,如果我们保存的一些重要信息,需要格外注意。 2.cookie的失效时间:如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止,如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期. 3.cookie的存储空间:Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.
2.什么是session?
session呢是一种基于服务器和客户端都要存储的一个唯一标志,也叫做session_id,当我们使用session机制时,会将信息来保存到服务器端同时也会生成一个session_id,也会在浏览器中生成一个session_id,它的作用时当浏览器再次访问服务器时会将客户端session_id发往服务器端,然后进行比对,这样浏览器就对拿到相对应的信息
专业来说就是我们客户端app是如何实现session的,这里一般没有cookie。app用户登陆后,服务器返回一个唯一ID,app储存起来,在每次请求服务器的时候,都带上这个ID,这样服务器接收到,就知道你是谁,然后做一些逻辑处理。
在我们生活中的例子:
比如我们在访问京东网页时,这时我们要登录才可以购买东西,我现在输入账号密码登录到京东后,此时我们的浏览器就会保存缓存和唯一标识符,服务器端也会保存缓存信息,叫做session,但是目前互联网人流较大,网络运营商都会采用多台服务器来进行做负载均衡,所以需要一个唯一标识符来作为标记,这样当一台具有session_id的浏览器来可以对应上它所保存的session缓存信息,这个唯一标识符叫做session-ID,这个就可以实现缓存功
3.相同点
1.cookie和session都是用来跟踪浏览器用户身份的会话方式。
2.都是为了缓存存储来提高网站速率
4.不同点(重点 面试中会遇到)
存储:cookie数据保存在客户端,session数据保存在服务端。
安全:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
数据存储空间:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。