Cookie、Session、Token区别:
Cookie是一种存储在浏览器的数据,Cookie的核心特点是:每个请求都会自动发送Cookie到相应服务器那里。Cookie是由客户端向服务器发送请求,服务器产生Cookie返回给客户端,存放于浏览器的缓存中。 打开浏览器可以看到保存了哪些Cookie,所以用户名和密码直接放在Cookie里不安全。解决此安全问题的就是Session了。
Session(会话):服务器会根据浏览器发来的用户名密码创建 SessionID(无规律字符串)和会话结束时间(Max-age)并存储在服务器端 (用户离开网站后session会被销毁),然后将这两样东西放到Cookie中还给浏览器。后续浏览器的每次请求都带着这个Cookie去找服务器,服务器根据SessionID识别用户。负载均衡会导致另一台服务器session丢失。另外SessionID可以伪造,为此服务器为了安全要建立白名单。要想不用白名单,就用JWT技术(JSON Web Token)。
JWT:用户第一次登录网页后,服务器会生成一个JWT,服务器不需要保存他,只需要保存JWT签名的密文。接着服务器将JWT发给浏览器,可以让浏览器以Cookie或者Storage的形式进行存储。假设存储在Cookie中,那么后续浏览器的每次请求都带着这个Cookie(也就是JWT)去找服务器,和Session很类似。这里的Token存储在用户那。
总结:Session诞生并保存在服务器中,由服务器主导一切;Cookie是一种数据载体(货车),把Session放入Cookie中送到客户端,Cookie跟随HTTP的每个请求发送出去,Cookie是一种存储在浏览器的数据;Token诞生在服务器但保存在浏览器,由客户端主导一切。