Cookie:服务端标识客户端请求是否来自同一浏览器,让浏览器积累服务端特有的信息,每次访问都能把这些信息提供给客户端
-
请求过程
客户端发送请求=>服务端发送响应set-cookie,包含本次请求的用户信息=>浏览器接收信息,保存cookie,并设置响应头的cookie内容
通过设置cookie的domain可以知道每个cookie对应哪个服务器
path可以指定了主机下哪些路径可以接受cookie
会话期cookie退出后即失效,持久化cookie保存在硬盘中
cookie设置为secure,标识只能通过HTTPS发送该cookie -
应用场景
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
Session:因为HTTP是无状态协议,一次请求结束之后,下一次请求并不知道之前的请求做了什么,状态如何。在某些场景下,比如用户登陆后,我们希望其他HTTP请求能记录下用户已经登陆的这个状态,以及相关的用户信息,就可以从session中获取相关数据。
一般来说,session中适合存储一些安全和需要持久化的数据,比如用户信息,登陆状态。因为session保存在服务端开辟一块内存中,并会为客户端创建一个session id,并且把session id返回给客户端。所以session中也不宜保存太多数据。
因为session保存在服务端,因此服务端需要为session设定个过期时间,防止过多session占用内存。
有了cookie为什么还需要session?
1.减少客户端占用空间,用session只需要在客户端保存一个id,实际上大量数据都是保存在服务端。如果全部用cookie,数据量大的时候客户端是没有那么多空间的。
cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。
2.全部在客户端保存,服务端无法验证,这样伪造和仿冒会更加容易。(伪造一个随机的id很难,但伪造另一个用户名是很容易的)
3.全部保存在客户端,那么一旦被劫持,全部信息都会泄露
4.节约客户端带宽,客户端数据量变大,网络传输的数据量也会变大
session和cookie的作用
网友评论