session
- 服务器为客户端的一次请求开辟的一段内存空间,存储Session对象,内部结构为ConcurrentHashMap
- 弥补HTTP的无状态特性
- 判断同一会话:
- 第一次请求生成SessionId,通过HTTP响应头SetCookie: JSESSIONID=xxx指令要求客户端设置Cookie;
- 客户端下一次请求携带SessionId,服务器就可判断为同一会话
- 缺点:
Cookie
- 服务器在客户端浏览器保存的数据
- 作用
- 会话管理:登陆、购物车、游戏得分
- 个性化:用户偏好、主题或其他设置
- 追踪:记录分析用户行为
- 分类:
- 会话Cookie:未指定过期时间,客户端关闭则消失
- 永久Cookie:指定的过期时间,客户端关闭不消失,在特定日期(Expires)或特定时间长度(Max-age)外过期
- HttpOnly:防止攻击者通过程序(JS/Applet)获取用户Cookie,泄漏信息
- 作用域
- Domain指定哪些主机可以接受Cookie,包含子域,如Domain=sogou.com,则其子域名wenwen.sogou.com也包含Cookie
- Path指定路径作用域,包含子路径,如:Path=/pweb,则子路径/pweb/web也可匹配
JWT
- 即json web token,与session cookies都可用于用户身份认证
- JWT格式:xxx.yyyy.zzzzz
- xxx:Header:指定令牌类型(JWT)和签名算法
{
"alg":"HS256",
"typ":"JWT"
}
{
"sub","12345",
"name", "Jim",
"admin", true
}
- zzzzz:Signature:签证信息,三部分组成
- header(base64后)
- payload(base64后)
- secret
比如需要HMAC SHA256算法进行签名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload) + "." +
secret)
- JWT优点
- 有加密签名,可保证一定安全性
- 无状态,声明存储在客户端,身份验证可以在本地进行,无须进行服务器通信,降低了资源消耗
- 支持跨域认证,由于不依赖服务节点,所以可以做到这点