Cookie
服务器发送到浏览器,并保存在浏览器端,浏览器请求服务端时会带上cookie。
cookie作用
- 会化状态管理(登录信息、购物车信息等)
- 个性化设置(用户自定义设置、主题等)
- 浏览器跟踪行为(跟踪分析用户行为)
Session
session存储于服务端,用于存储用户和服务端一次会话的过程,用户关闭会话或者服务端session过期时会话结束。
分布式session策略
- Nginx ip_hash 策略:服务端使用Nginx代理,根据访问的IP分配,由此同一个IP只会访问同一个服务器;
- Session复制:任何一个节点改变时,会把改变广播给其余节点;
- 共享Session:将session存放在共享的中间件中,例如Redis。
Cookie和Session区别
- cookie保存在客户端,session保存在服务端;
- cookie只能保存ASCII,session可以保存任意数据类型;
- cookie容易被截取,session保存在服务端,无法被截取;
- 单个cookie只能存4KB大小的数据,session大小取决服务端。
Cookie和Session关联
用户第一次请求服务端时,服务端将用户传递的信息打包成session,存到Redis中,设置过期时间,并生成唯一对应的sessionId通过cookie发送到浏览器,同时cookie记录该sessionId对应的域。
之后用户端访问服务端时,判断该域名下是否存在cookie,存在的话就把cookie带上,服务端获取cookie里的sessionId,找到对应的session,判断有没有过期。
Token(JWT)
token机制与seesion类似,浏览器端第一次访问服务端时,服务端生成token返回给浏览器端,浏览器端再访问时带上token,服务端校验token信息。