今天有个网友问,随便就记录下。
讲两者间的区别前,我们先了解这两者是干嘛用的:
Session是保存在服务端,理论上是没有大小限制,当然前提是你的服务器内存够。
针对一个web项目,一个浏览器共享一个session,就算有两个web项目部署在同一个服务器上,针对两个项目的session是不同的
如:你在tomcat上同时部署了两个web项目,分别是web1、web2。当你在一个浏览器上同时访问web1时创建的session是A1,访问web2时创建的session是A2。
后面你再多次访问web1使用的session还是A1,多次访问web2时使用session就是A2。
Cookie是存放在浏览器中,有大小限制并且个数也有限制。
通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookie是服务器在本地机器上存储的小段文本并随每一个请求发送至服务器,是在客户端保持状态的方案。
Cookie的主要内容包括:名字,值,过期时间,路径和域。使用Fiddler抓包就可以看见,比方说我们打开百度的某个网站可以看到Headers包括Cookie,在web项目中cookie使用最多的场景是用于存放用户信息
区别:
存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。
Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。
session可以多服务器共享实现分布式的主要前提之一。
写到这有人或许会疑问,按上面所讲cookie和session之间是没有任何联系,为何当浏览器禁用cookie之后一点登录有的网站会没有用。
其实是因为两者中产生了依赖,有的登录原理是后端生成一个 session ID,设置到 cookie,后面所有请求浏览器都会带上cookie,然后服务端从cookie获取 session ID,查询到用户信息。所以有时会照成登录不了的原因,只要重新输入账号登录便可以了。
保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据
领取专属 10元无门槛券
私享最新 技术干货