-
存储位置:
- Cookie:数据保存在客户端的浏览器上。当用户访问网站时,浏览器会将Cookie发送给服务器,以便服务器能够识别用户身份或获取用户之前的状态。
- Session:数据保存在服务器端。服务器为每个用户会话创建一个唯一的Session ID,并通过Cookie或URL重写等方式将ID传递给客户端。客户端在后续的请求中携带这个ID,服务器根据ID检索对应的Session数据。
-
安全性:
- Cookie:由于数据保存在客户端,因此存在一定的安全风险。如果Cookie被截获或篡改,用户的隐私和安全性可能会受到威胁。此外,如果主要考虑到安全应当使用session。
- Session:由于数据保存在服务器端,相对更加安全。服务器可以通过加密等手段保护Session数据,防止被恶意攻击者窃取或篡改。
-
有效期:
- Cookie:过期与否可以在Cookie生成的时候设置进去。用户可以在浏览器中设置Cookie的过期时间,或者通过浏览器的“清除浏览数据”功能删除Cookie。
- Session:过期与否取决于服务期的设定。服务器可以设置Session的超时时间,当用户会话超过这个时间后,Session数据将被自动清除。
-
对服务器性能的影响:
- Cookie:对服务器性能的影响较小。因为数据保存在客户端,服务器不需要为每个用户保存额外的Session数据。
- Session:当访问增多时,会比较占用服务器的性能。因为服务器需要为每个用户保存Session数据,并在每次请求时根据Session ID检索数据。
-
存储容量限制:
- Cookie:单个Cookie在客户端的限制是3K(即一个站点在客户端存放的Cookie不能超过3K)。因此,Cookie不适合存储大量的数据。
- Session:没有明确的存储容量限制,但受到服务器性能和可用内存的限制。
-
应用场景:
- Cookie:主要用于记录用户的偏好设置、购物车信息、自动登录等需要保存在用户浏览器端的状态信息。
- Session:主要用于记录用户的登录状态、访问信息、防止CSRF攻击等需要服务器端持久化保存的数据
-
有效期不同:
-
会话期Cookie:基于内存保存,会话期Cookie是最简单的Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。
-
持久性Cookie:基于硬盘保存,和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间(Expires)或有效期(Max-Age)。
cookie有会话cookie和持久cookie,生命周期为浏览器会话期的会话cookie保存在缓存,关闭浏览器窗口就消失 -
持久cookie被保存在硬盘,直到超过设定的过期时间
-
随着服务端session存储压力增大,会根据需要定期清理session数据
-
-
缺点:
- cookie缺点:使用cookie来传递信息,随着cookie个数的增多和访问量的增加,它占用的网络带宽也越大。
- cookie并不安全,因为cookie是存放在客户端的,所以这些cookie可以被访问到,设置可以通过插件添加、修改cookie。所以从这个角度来说,我们要使用sesssion,session是将数据保存在服务端的,只是通过cookie传递一个sessionId而已,所以session更适合存储用户隐私和重要的数据。
- Session缺点:不容易在多台服务器之间共享,可以使用session绑定,session复制,session共享解决。session存放在服务器中,所以session如果太多会非常消耗服务器的性能