# 1、相同点:
cookie 和 session 都是用来跟踪浏览器用户身份的会话方式。
# 2、工作原理
# Cookie 的工作原理
(1)浏览器端第一次发送请求到服务器端(2)服务器端创建 Cookie,该 Cookie 中包含用户的信息,然后将该 Cookie 发送到浏览器端(3)浏览器端再次访问服务器端时会携带服务器端创建的 Cookie(4)服务器端通过 Cookie 中携带的数据区分不同的用户
补充:在服务器在 HTTP 响应中发送 Cookie 时,浏览器会解析响应头部的 Set-Cookie 信息,并自动将 Cookie 存储在本地。前端开发人员无需显示操作,可通过 JS 提供的 API 来操作当前页面的 Cookie。
# Session 的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个 Session,同时会创建一个特殊的 Cookie(name 为 JSESSIONID 的固定值,value 为 session 对象的 ID),然后将该 Cookie 发送至浏览器端(2)浏览器端发送第 N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该 name 为 JSESSIONID 的 Cookie 对象(3)服务器端根据 name 为 JSESSIONID 的 Cookie 的 value (sessionId), 去查询 Session 对象,从而区分不同用户。
- 若 name 为 JSESSIONID 的 Cookie 不存在(关闭或更换浏览器),返回 1 中重新去创建 Session 与特殊的 Cookie;
- 若 name 为 JSESSIONID 的 Cookie 存在,根据 value 中的 SessionId 去寻找 session 对象
- value 为 SessionId 不存在(Session 对象默认存活 30 分钟),返回 1 中重新去创建 Session 与特殊的 Cookie
- value 为 SessionId 存在,返回 session 对象。


# 区别
cookie 数据保存在客户端,session 数据保存在服务端。session: 当你登陆一个网站的时候,如果 web 服务器端使用的是 session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话 sessionid,服务器根据当前 sessionid 判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。传统的会话管理技术可以选择将会话数据存储在数据库中。这通常涉及将会话数据和用户登录信息存储在同一个数据库中的不同表中,并通过某种方式将它们关联起来。cookie:sessionid 是服务器和客户端连接时候随机分配的,如果浏览器使用的是 cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了 cookie 用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释 cookie 变量,所以只要不关闭浏览器,那么 cookie 变量一直是有效的,所以能够保证长时间不掉线。补充:当涉及到大量并发用户执行登录操作时,会话管理技术可能会增加服务器的负载,并降低性能。这是因为每个用户的登录请求都需要进行 IO 操作,包括数据库查询和写入操作。这可能对数据库和服务器的性能产生一定的影响。为了处理高并发情况,可以采用一些优化措施,如使用缓存机制、数据库连接池和分布式部署等来提高性能和扩展性。
# 区别对比
(1) cookie 数据存放在客户的浏览器上,session 数据放在服务器上 (2) cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,如果主要考虑到安全应当使用 session (3) Session 数据会在一定时间内保存在服务器上,因此在访问量增加时,会占用服务器的内存和性能。如果关注服务器性能方面的考虑,可以使用 Cookie 来减轻服务器的负载。Cookie 存储在客户端,不会占用服务器的内存资源。(4) 单个 cookie 在客户端的限制是 4KB,每个域名在客户端存储的 Cookie 数量也是有限制的,通常是几十个或几百个。因此,需要注意 Cookie 的大小和数量,以避免超出限制。(5) 所以:将登陆信息等重要信息存放为 SESSION; 其他信息如果需要保留,可以放在 COOKIE 中