token vs session
功能上都是用来保持会话
session是服务器端存储来访用户信息从而保持会话的对象。服务器重启session消失。基于cookie
session状态保持原理
一段话概括:用户拿着数据访问服务器后,服务器会将数据写入session,返回给浏览器sessionid;用户再次通过浏览器访问服务器时会携带sessionid,服务器通过sessionid在session中获取数据,返回给浏览器用户信息,以此实现状态保持。
弊端:
1、服务器压力增大
因为session是存储在内存中,所以用户量越大所占内存就越大
2、易受CSRF跨站伪造请求攻击
session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
3、扩展性不强
如果将来搭建了多个服务器,虽然每个服务器都执行的是同样的业务逻辑,但是session数据是保存在内存中的(不是共享的),用户第一次访问的是服务器1,当用户再次请求时可能访问的是另外一台服务器2,服务器2获取不到session信息,就判定用户没有登陆过。
token状态保持原理
一句话概括:用户拿着数据访问服务器后,服务器将数据加密生成token返回给浏览器,浏览器将token值存储在Local Storage中(由JS调取),用户再次通过浏览器访问服务器时会携带token值,服务器解密token,查询到数据后返回给浏览器用户信息,以此实现状态保持。
因为服务器只是做了token解密与用户数据查询,所以多台服务器同时工作也不会出问题;没有session 的扩展性问题