1)定义:

因为HTTP是无状态的,所以很难去维护一些状态信息,cookie就是存储在客户端用于维护状态信息的一个东西,比如我们可以通过cookie来维护购物车、登录信息等, session就是服务端对应的产物。服务端在收到客户端请求后会创建session并生成对应的sessionId回送客户端,客户端收到之后存储起来,接下来请求都带上这个ID,那么在服务端就可以根据id取出对应的信息,也就达到了维护状态信息的目的。

2)对比:

① cookie存储在客户端,session存储在服务端;
② cookie存储的数据只能是ASCII,session无限制;
③ cookie一般失效时间较长,session一般失效时间较短或者会话断开失效;
④ cookie存储数据不能超过4k,session远高于此。

3)分布式session

现在的服务器一般是集群部署,那么就会出现在A上生成的session,在B上无法被感知的情况,因此有了分布式session这种东西。一种解决方案是在nginx处做一致性hash,同个客户端的请求发送到同个服务器上;另一种就是共享式session,也即是利用分布式缓存中间件来存储session,这样就可以达到分布式session的效果,也是比较常用的一种方法。